我可能遗漏了关于 list extend 的预期行为的一些信息,但为什么会发生以下情况?
x = [[],[]]
y = [[]] * 2
print x # [[],[]]
print y # [[],[]]
print x == y # True
x[0].extend([1])
y[0].extend([1])
print x # [[1],[]], which is what I'd expect
print y # [[1],[1]], wtf?
我猜*
操作员在这里做了一些意想不到的事情,尽管我不确定是什么。似乎在幕后发生了一些事情,这使得原始 x 和 y(在调用 extend 之前)实际上并不相等,即使==
运算符和repr
两者都会使它看起来好像它们是相同的。
我只是遇到这个,因为我想预先填充一个在运行时确定大小的空列表列表,然后意识到它不像我想象的那样工作。我可以找到更好的方法来做同样的事情,但现在我很好奇为什么这不起作用。这是 Python 2.5.2 BTW - 我没有安装更新的版本,所以如果这是一个错误,我不确定它是否已经修复。