在Python中,我创建了整数和列表对象,如下所示:
a = 10
b = 10
x = []
y = []
然后,在比较a
和b
的ID以及x
和y
id(a)==id(b) returns True
id(x)==id(y) returns False
在某处我读到Python中的赋值永远不会复制数据。我的问题是为什么x和y没有相同的id?
答案 0 :(得分:1)
你必须知道python整数是缓存的和不可变的,这意味着a
和b
都标记了相同的10
。列表是对象,它们被分配,这就是为什么它们的ID与开始不同
答案 1 :(得分:1)
列表是可变的,如果使用相同的对象,当您将项目添加到其中一个列表时,您也会看到另一个项目的更改。
整数的同一性取决于实现,并且通常仅对小数有效;良好的阅读here。
顺便说一句,==
是相等运算符。 id(a)==id(b)
的最短(也更简洁)方法是使用标识运算符is
。在您的情况下:a is b
。
答案 2 :(得分:0)
x = []
是实例化新列表的简写,这意味着具有新对象ID的新对象。即使将x
和y
指定为空列表,它们也只是对为各个列表分配的内存位置的引用。如果id(x) == id(y)
那么x
和y
将共享相同的对象ID,这实际上意味着它们共享一个内存位置,或者是对同一个对象的引用(因此对一个对象进行任何更改都会适用于其他)。
另一方面,id(a) == id(b)
因为它们都是整数,它们是原始数据类型。