Python 引用
有人能解释一下为什么整数的例子中,x和y的值会不同,而列表的例子中,x和y却是同一个对象吗?
x = 42
y = x
x = x + 1
print x # 43
print y # 42
x = [ 1, 2, 3 ]
y = x
x[0] = 4
print x # [4, 2, 3]
print y # [4, 2, 3]
x is y # True
4 个回答
0
这是因为在Python中,当你创建一个列表或元组时,其实是创建了一个指向某个对象的引用。
当你写 y = x 的时候,y 和 x 指向的是同一个对象。
所以当你修改 x 所指向的对象时,y 也会跟着变化。
4
如果你写 y = x
,那么y和x其实是指向同一个东西。但是整数是不可改变的,当你写 x + 1
的时候,会创建一个新的整数:
>>> x = 1
>>> id(x)
135720760
>>> x += 1
>>> id(x)
135720748
>>> x -= 1
>>> id(x)
135720760
当你有一个可改变的对象(比如列表,或者你自己定义的类)时,只要y发生变化,x也会跟着变化,因为它们指向的是同一个对象。
8
因为整数是不可变的,而列表是可变的。从语法上你就能看出来。在 x = x + 1
这行代码中,你实际上是给 x
赋了一个新值(它在等号左边是单独的)。而在 x[0] = 4
这行中,你是在对列表使用索引操作,并给它一个参数——这实际上等同于 x.__setitem__(0, 4)
,很明显这是在改变原来的对象,而不是创建一个新的对象。