我的Python变量是怎么回事?old_pos似乎被链接到pos
代码:
pos = [7, 7]
direction = [1, 1]
old_pos = pos
print 'pos = '+str(pos)
print 'old_pos = '+str(old_pos)
pos[0] += direction[0]
pos[1] += direction[1]
print 'pos = '+str(pos)
print 'old_pos = '+str(old_pos)输出:
pos = [7, 7]
old_pos = [7, 7]
pos = [8, 8]
old_pos = [8, 8]但是,如果我将old_pos = pos替换为old_pos = tuple(pos)甚至old_pos = list(pos),我就不会遇到这样的问题:
pos = [7, 7]
old_pos = [7, 7]
pos = [8, 8]
old_pos = [7, 7]发布于 2010-09-01 14:55:56
当您说old_pos = pos时,您不是在创建pos的副本,而是对同一个列表进行另一次引用。如果您想要两个独立运行的列表,您将需要创建一个副本,比如使用您提到的list(pos)函数,或者使用片表示法pos[:]。
发布于 2010-09-01 15:36:07
old_pos = pos不创建名称pos引用的对象的副本,而是创建另一个名为old_pos的引用,该引用指向同一个对象。对pos执行的操作会影响old_pos引用的同一个对象。同样,“史蒂文”和“伦巴斯基先生”这两个名字都是指我。如果你打史蒂文的脸,伦巴斯基先生就会受伤,因为这两个名字指的是同一个对象--我。
这里有三种方法来制作一个实际的副本,而不是第二个引用:
使用切片符号
old_pos = pos[:]使用列表构造函数
old_pos = list(pos)使用复制模块
from copy import copy
old_pos = copy(pos)请注意,这些副本都是浅拷贝,在本例中是可以的。要了解浅拷贝和深拷贝之间的区别,请阅读副本模块的文档。
发布于 2010-09-01 14:56:08
old_pos似乎与pos有关联
正确-这个:
old_pos = pos使old_pos和pos指向相同的列表。它不会创建pos的新副本。
https://stackoverflow.com/questions/3619368
复制相似问题