我写了一个搜索宝藏的代码。正如代码所示,当我放下声纳时,它会显示胸部的提示。但是,在我的代码中,所有行都将更改。我真的不知道为什么。我希望有人可以帮助我。非常感谢!
insertToDB = function() {
var url_list = Session.get('url_list');
Products.insert({
'url_list': url_list
});
Session.set('url_list', []); // To empty the client-side list
}
答案 0 :(得分:1)
在python列表中是可变的。此外,当您在另一个列表中插入列表时,存储的是引用。
看看如果运行此代码会发生什么(我使用与getChest
方法中相同的变量名称)
aList = [1,2,3]
chests=[]
chests.append(aList)
chests.append(aList)
print chests
aList[0] = 999
print chests
您可以在任何python书中搜索“reference”和“mutable”这两个术语,以获得更全面的解释。还可以查看copy
模块(查找“深拷贝”和“浅拷贝”概念)。
答案 1 :(得分:1)
在您的get_board
功能中,您正在创建colume
,然后一遍又一遍地将其附加到主机上 - 但这并不是每次都创建一个新列表,而是'是同一个对象。
def get_board(self):
colume=['~']*60
for y in range(0,15):
self.board.append(colume)
return self.board
每次此功能执行self.board.append(colume)
时,它都没有"添加' colume'的内容。在#self; board'"结束时,它会说"添加另一个参考' colume' to self.board",以便self.board
中的每个条目都是同一个对象。您可以使用id
对此进行测试,以获取对象的内部标识符。它应该是不同的。当我尝试时:
>>> board = list()
>>> colume=['~']*60
>>> for y in range(0,15):
... self.board.append(colume)
>>> id(board[0])
140498301136840
>>> id(board[1])
140498301136840
>>> id(board[2])
140498301136840
相反,如果你这样做:
>>> board = list()
>>> for y in range(0,15):
... board.append(['~'] * 60)
>>> id(board[0])
140498301203376
>>> id(board[1])
140498301176432
>>> id(board[2])
140498301204456
所有不同的对象,并且更改一个对象并不会更改其他对象'董事会。