Python 中的变量是引用或名称,不像 C 等中的变量。
这段代码:
x=y=Queue()
意思是“允许名称y
引用通过调用创建的内存中的对象Queue()
,并允许名称x
引用y
指向的对象。” 这意味着两个变量都引用同一个对象——你可以用id(x) == id(y)
.
这段代码:
x=Queue()
y=Queue()
意思是“允许名称x
引用一个由 制作的对象Queue()
,并允许名称y
引用另一个制作的对象Queue()
”。在这种情况下,id(x) == id(y)
是False
这通常会咬你:
a = [1,2,3,4,5]
b = a
b.append(6)
print(a)
# [1,2,3,4,5,6] even though we didn't seem to do anything to a!
为了解决这个问题,做import copy; b = a.copy();
而不是b = a
.
但是,这种行为不会发生在像整数这样的不可变对象上:
a = 7
a += 1
这不会转到a
引用的对象并通过添加一个来更改它,而是a
从对象 7 取消引用,并将其引用到表示a
+ 1 的先前值(即 8)的对象。这与对可变对象执行的操作不同,例如前面示例中的列表 - 附加到列表确实会更改变量引用的对象。
所以我们可以这样做:
a = 7
b = a
a += 1
print(a)
# 8
print(b)
# 7