我正在努力解决这个问题,并且无法找到解释它的文档。
我的代码创建了一个使用列表作为实例变量的类。简单版本的代码:
class Board:
def __init__(self):
self.grid = [] #so new instance of grid for each object
当我创建两个对象并使用另一个网格的新副本交换网格,然后在其上运行类方法时,对两个网格的更改都会同步。
代码:
x = Board()
x.getNewBoard() #creates list with random ints
y = Board()
y.grid = x.grid[:] #new copy, not reference
print(y.grid) #matches x.grid
boardSim(x) #changes to x.grid happen here
print(y.grid) #here the results of y.grid and x.grid are
print(x.grid) #the same despite only running boardSim on x
我尝试再次运行它,但这次在给它分配了x.grid的副本之后立即将29834739附加到y.grid。它执行相同的同步,但最后它有29834739. x.grid没有29834739.当我将它附加到x.grid时,它再次同步,但x.grid有时髦的数字,y.grid没有'吨。
然后我尝试为y.grid创建一个完全不同的列表:
x = Board()
x.getNewBoard()
y = Board()
y.getNewBoard()
print(y.grid)
boardSim(x)
print(y.grid)
网格没有同步:当我运行boardSim(x)时,它没有运行boardSim(y)。
所以我想也许我正在创建对x.grid的引用而不是全新的副本,但有人告诉我拼接列表会创建副本吗?我正在使用python 3。
感谢。