Python Variable Assignment
本问题已经有最佳答案,请猛点这里访问。
有人能解释一下为什么在python中会发生这种情况吗?
1 2 3 4 5 6 7 8 9 10 11 | >>> 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] |
基本上,为什么我可以重新分配A或B中的元素并更改另一个,但如果我完全修改了列表,就不能更改另一个?谢谢您!
当使用a指定b时,两个对象现在都指向相同的内存位置。所以在任何一个对象中所做的任何更改都将反映在另一个对象中。当用新值分配"b"时,对象内存地址将变为不同的。详述:
1 2 3 4 5 6 7 8 9 10 11 12 | >>> a=[1,2,3] >>> b=a >>> id(a) 4520124856 >>> id(b) 4520124856 >>> b=[111] >>> id(a) 4520124856 >>> id(b) 4520173936 >>> |
id()用于获取对象的内存地址。
如果要在不具有相同内存位置的情况下创建"a"的精确副本,请使用b=a[:]仅创建数据的副本。
当我们定义变量b=a python时,将这个值保存在内存位置x中。点A和点B都是X内存位置。所以我们改变了B的值,A的值也改变了。我们将新值赋给b,使其存储在另一个内存位置,b指向新的内存位置。所以a的值保持不变。
这是因为当您执行