Python列表已同步

时间:2016-07-25 16:04:54

标签: python list class

我正在努力解决这个问题,并且无法找到解释它的文档。

我的代码创建了一个使用列表作为实例变量的类。简单版本的代码:

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。

感谢。

0 个答案:

没有答案