Python赋值(或Binding)示例

MTH*_*THL 0 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)
Run Code Online (Sandbox Code Playgroud)

第一:结果是9
秒:结果是{1,3,4,6}

首先,y的变化不会改变y.在第二个时刻,S由T的变化改变.我想知道原因.先感谢您!=)

Ray*_*oal 6

这是一个非常常见的问题.对于Python,阅读语言参考的这一部分很有帮助.

简而言之,在Python中,您将名称绑定到对象.

在第一个示例中,您将名称绑定到x其值为整数9的y对象.然后绑定到同一个对象.接下来,绑定到x其值为整数18的对象.绑定的对象y仍然是值为9的对象,因此打印9.

在第二个示例中,将set对象绑定到S.然后将同一个对象绑定到T.代码T.remove(5) 改变了绑定到T的对象,T是绑定到S的同一对象.这就是为什么当您检查时S,您会看到所做的更改T,因为名称ST绑定到完全相同的对象.

在图片中:

x = 9

    x -----------> 9

y = x

    x -----------> 9
                   ^
                   |
    y -------------+

x = 18

    x -----------> 18

    y ------------> 9
Run Code Online (Sandbox Code Playgroud)

看到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 -------------+
Run Code Online (Sandbox Code Playgroud)

绑定到S更改的对象.注意我没有说S改变了!我从未改变过绑定; S并且T仍然指向同一个对象.理解名称和绑定到它们的对象之间的区别非常重要.

还要注意,我没有说"变量"这个词.:)