运行代码
listoflists = []
list = []
for i in range(0,10):
list.append(i)
if len(list)>3:
list.remove(list[0])
listoflists.append((list, list[0]))
print listoflists
回报
[([7, 8, 9], 0), ([7, 8, 9], 0), ([7, 8, 9], 0), ([7, 8, 9], 1), ([7, 8, 9], 2), ([7, 8, 9], 3), ([7, 8, 9], 4), ([7, 8, 9], 5), ([7, 8, 9], 6), ([7, 8, 9], 7)]
所以不知何故,每个元组(列表)的第一个参数每次都会在列表列表中更新,但第二个参数列表 [0] 不会。有人可以解释这里发生了什么并提出解决此问题的方法吗?我想输出
[([0],0), ([0,1],0), ...
原文由 Carl 发布,翻译遵循 CC BY-SA 4.0 许可协议
列表是一种可变类型——为了创建一个副本(而不是仅仅传递相同的列表),您需要明确地这样做:
但是,
list
已经是 Python 内置的名称 - 最好不要将该名称用于您的变量。这是一个不使用list
作为变量名并制作副本的版本:请注意,我演示了两种不同的方法来复制上面的列表:
[:]
和list()
。第一个,
[:]
,正在创建一个 _切片_(通常只用于获取列表的一部分),它恰好包含整个列表,因此实际上是列表的副本。第二个
list()
正在使用实际的list
类型构造函数 来创建内容与第一个列表相同的新列表。 (我没有在第一个例子中使用它,因为你在你的代码中覆盖了那个名字——这是一个很好的例子,说明为什么你不想那样做!)