Python变量赋值

use*_*129 1 python variables list variable-assignment

有人可以解释为什么在Python中发生这种情况?

>>> a = [1, 2, 3]
>>> b = a
>>> b[0] = 2
>>> print a
[2, 2, 3]
>>> a[0] = 4
>>> print b
[4, 2, 3]
>>> b = [111]
>>> print a
[4, 2, 3]
Run Code Online (Sandbox Code Playgroud)

基本上,为什么我可以重新分配a或b中的元素并更改另一个元素,但如果我完全修改列表,则不能更改另一个元素?谢谢!

Ala*_*amu 6

使用a分配b时,两个对象现在都指向相同的内存位置.因此,在任一对象中完成的任何更改都将反映在另一个对象中.为"b"分配新值时,对象的内存地址会有所不同.详细说明:

>>> a=[1,2,3]
>>> b=a
>>> id(a)
4520124856
>>> id(b)
4520124856
>>> b=[111]
>>> id(a)
4520124856
>>> id(b)
4520173936 
>>> 
Run Code Online (Sandbox Code Playgroud)

id()用于获取对象的内存地址.

如果你想创建'a'的精确副本而没有相同的内存位置,请使用b = a [:],这将只创建数据的副本.