在Python中赋值变量

时间:2016-11-22 08:31:46

标签: python

在Python中,我创建了整数和列表对象,如下所示:

a = 10
b = 10
x = []
y = []

然后,在比较ab的ID以及xy

的ID时,我会得到以下结果
id(a)==id(b)  returns True
id(x)==id(y) returns False

在某处我读到Python中的赋值永远不会复制数据。我的问题是为什么x和y没有相同的id?

3 个答案:

答案 0 :(得分:1)

你必须知道python整数是缓存的和不可变的,这意味着ab都标记了相同的10。列表是对象,它们被分配,这就是为什么它们的ID与开始不同

答案 1 :(得分:1)

列表是可变的,如果使用相同的对象,当您将项目添加到其中一个列表时,您也会看到另一个项目的更改。

整数的同一性取决于实现,并且通常仅对小数有效;良好的阅读here

顺便说一句,==是相等运算符。 id(a)==id(b)的最短(也更简洁)方法是使用标识运算符is。在您的情况下:a is b

答案 2 :(得分:0)

x = []是实例化新列表的简写,这意味着具有新对象ID的新对象。即使将xy指定为空列表,它们也只是对为各个列表分配的内存位置的引用。如果id(x) == id(y)那么xy将共享相同的对象ID,这实际上意味着它们共享一个内存位置,或者是对同一个对象的引用(因此对一个对象进行任何更改都会适用于其他)。

另一方面,id(a) == id(b)因为它们都是整数,它们是原始数据类型。