我们都知道Python中的列表是引用类型,即包含列表的变量并不直接保存列表,而是保存对列表的引用。
我们都知道Python中的所有东西都是一个对象。
所以我想到的问题是,整数也是Python中的对象,所以持有整数的变量也会包含对整数的引用;那么为什么只将列表归类为引用类型呢?
Python中的不是整数,而是引用类型,这是因为在Python?中,一切都是对象。
发布于 2020-09-10 14:03:49
这些概念在Python中并不真正适用。根据我的经验,“引用类型”和“值类型”主要用于.NET语言,例如C#,它们有特定的含义--引用类型的变量存储对对象的引用,而值类型的变量直接存储对象的值。您无法获得存储在变量中的对象的引用(尽管您可以创建该值的“装箱”副本并获得对该框的引用)。在其他语言中,这些术语可以通过类推方式使用--但在Java中,所有类都是.NET所认为的“引用类型”,并且只有原语在.NET中表现为“值类型”,因此这些术语并不是真正必要的。让我们回到Python。
如果我们使用.NET的意思,那么是的,所有的a类型实际上都是“引用”类型,因为每个变量都是对对象的引用*,执行a = b将使a引用与b相同的对象。但是,关于“引用类型”和“值类型”的问题是,当一个对象是不可变的时,它是否属于引用类型或值类型不再重要。在区分重要的地方,您不能做一件大事--不能有两个对同一个对象的引用,可以通过其中一个来修改对象,然后当其他对象发生变化时会感到惊讶!
这是一种长篇大论的说法,当人们在Python中调用整数“值类型”时,他们可能会从C#或可能Java的角度来考虑它们,并注意到它们的行为与C#中的值类型非常相似,或者原语在Java中的行为也是如此,因为它们是这样的!但那真的是因为它们是不可变的,比其他任何东西都重要。
*在这里,我使用的“引用”比在C#中找到的更一般意义上的引用。一般意义上是指定特定对象的某种句柄、地址或标识符,这样我们就可以拥有对单个对象的许多“引用”。“引用”和“指针”都是一般性术语,在某些语言中可能有更具体的含义。例如,C#引用是一个与C++引用非常相似的概念,但与C++引用完全不同。在某些语言中,“指针”是可以用算术操作的数字内存地址,而在其他语言中,“指针”与我描述的“引用”的一般含义是无法区分的。我发现“引用”一词对于描述Python中的内容来说是最中立和最有用的,但是在比较一种语言和另一种语言时,要小心使用所有这些术语。
https://stackoverflow.com/questions/63830852
复制相似问题