#First
x = 9
y = x
x = 18
print(y)
#Second
S = {1,3,4,5,6}
T = S
T.remove(5)
print(S)
第一:结果是9
第二:结果是{1,3,4,6}
首先,y的变化不会改变y。 在第二个时刻,S由T的变化改变。 我想知道原因。 先感谢您! =)
答案 0 :(得分:6)
这是一个非常常见的问题。对于Python,阅读this section of the language reference会很有帮助。
简而言之,在Python中,您将名称绑定到对象。
在第一个示例中,将名称x
绑定到值为整数9的对象。然后绑定到同一对象的y
。接下来,绑定到x
对象,其值为整数18.绑定到y
的对象仍然是值为9的对象,因此打印9。
在第二个示例中,将设置对象绑定到S
。然后将同一个对象绑定到T
。代码T.remove(5)
改变绑定到T的对象,这是绑定到S 的同一对象。这就是为什么当您检查S
时,您会看到通过T
所做的更改,因为名称S
和T
绑定到完全相同的对象。
在图片中:
x = 9
x -----------> 9
y = x
x -----------> 9
^
|
y -------------+
x = 18
x -----------> 18
y ------------> 9
请参阅y
未发生变化。为什么不?因为我将x
绑定到一个新对象。但我没有改变y
绑定的内容。现在让我们看看第二个例子
S = {1, 3, 4, 5, 6}
S -----------> 1 3 4 5 6
T = S
S -----------> 1 3 4 5 6
^
|
T -------------+
T.remove(5)
S -----------> 1 3 4 6
^
|
T -------------+
绑定到S
的对象发生了变化。注意我没有说S
已经改变了!我从未改变过绑定; S
和T
仍然指向同一个对象。理解名称和绑定它们的对象之间的区别非常重要。
另请注意,我没有说“变量”这个词。" :)
答案 1 :(得分:1)
首先使用x
作为对象的引用,其值为9,然后y
作为对x
的同一对象的引用。将x
分配给值为18的新对象后,x
现在引用另一个对象,但y
仍然引用值为9的同一对象。