下面是代码
a =2
b = a
b = 3
print (b,a)
3 2
如果a
仅指向3
的内存空间而没有自己的内存,我希望b
的值也将更改为a
。
我肯定有一个非常简单的解释,我很想念。
答案 0 :(得分:2)
不。分配将 reference 复制到对象,而不是对象本身。例如
a = [1, 2, 3]
b = a
b[0] = 5
print(a) # gives [5, 2, 3]
但是
b = a
b = 3
将b
重新分配为新的整数文字,而与a
无关。
也不是您问题的严格内容,但请参见 mutable 和 immutable 对象之间的区别。
答案 1 :(得分:0)
b = a
将b
指向与a
相同的对象。但是,当您执行b = 3
时,重新分配 b
指向另一个对象。 a
不受影响。
答案 2 :(得分:0)
这里的问题是,您认为python变量是一个指针,那里一点都不好,但是它们却不能那样工作。您应该将python变量视为值的标签。另外,您还必须考虑可变和不变的数据。 Python字符串和整数是不可变的,这意味着python为每个操作创建一个新数字并将变量重新分配给新数字。
如您的示例:
--------------------------------
| 3 | 2 | .. |
--------------------------------
a = 2 # a points to place 1 in our example memmory block
b = a # b points to the same memmory block as a
b = 3 # b change to point to the memmory block where 3 is located, place 0
在这种情况下:
a = 2 # a points to place 1 in our example memmory block
b = a # b points to the same memmory block as a
b += 1 # b == 2, b + 1 == 3, so b will point to a 3, a is still not modified
答案 3 :(得分:0)
如果您重新分配b值,则python将重新分配b,该b具有不同的值和内存位置。然后。打印带有id(a)和id(b)的地址,您可以看到,如果值不同,则内存地址实际上是不同的。
在python shell中尝试:
a = 3
b = a
id(b) == id(a) #it returns True
b = 2
id(b) == id(a) #it returns False