列表与int赋值 - “每个变量都是一个指针”

时间:2014-06-29 16:46:21

标签: python variables pointers

我知道这是一个非常基本的问题,但我需要帮助理解这个简短的概念。

我正在学习Python,这本书说" Python中的每个变量都是指向对象的指针。因此,当您编写类似y=x的内容时,您实际上会使它们都指向同一个对象。如果更改原始对象,则将更改指向它的所有其他指针"

然后他们举了一个例子:

x=[1,2,3]
y=x
x[1]=3
print y

它确实打印[1,3,3]

但是,当我编写以下代码时:

x=5
y=x
x=7
print y

不打印7.打印5。

为什么?

1 个答案:

答案 0 :(得分:6)

您的第一个例子可以解释如下:

x=[1,2,3]  # The name x is assigned to the list object [1,2,3]
y=x        # The name y is assigned to the same list object referenced by x
x[1]=3     # This *modifies* the list object referenced by both x and y
print y    # The modified list object is printed

然而,第二个示例仅将名称x重新分配给另一个整数对象:

x=5      # The name x is assigned to the integer object 5
y=x      # The name y is assigned to the same integer object referenced by x
x=7      # The name x is *reassigned* to the new integer object 7
print y  # This prints 5 because the value of y was never changed

以下是assignment in Python的参考资料。