Python赋值(或Binding)示例

时间:2015-10-05 02:50:46

标签: python assign

#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的变化改变。 我想知道原因。 先感谢您! =)

2 个答案:

答案 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所做的更改,因为名称ST绑定到完全相同的对象。

在图片中:

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已经改变了!我从未改变过绑定; ST仍然指向同一个对象。理解名称和绑定它们的对象之间的区别非常重要。

另请注意,我没有说“变量”这个词。" :)

答案 1 :(得分:1)

首先使用x作为对象的引用,其值为9,然后y作为对x的同一对象的引用。将x分配给值为18的新对象后,x现在引用另一个对象,但y仍然引用值为9的同一对象。