【问题标题】:Unexpected list append意外的列表追加
【发布时间】:2015-04-26 02:28:43
【问题描述】:
import random
stats = []
statslist = []
rollslist = []
for var1 in range(4):
    stats.append(random.randrange(1, 7))
rollslist.append(stats)
print(stats)
b = min(stats)
stats.remove(b)
print(sum(stats))
statslist.append(sum(stats))
print(stats)
print(rollslist)
print(statslist)

实际结果

[5, 1, 1, 3]
9
[5, 1, 3]
[[5, 1, 3]]
[9]

预期结果

[5, 1, 1, 3]
9
[5, 1, 3]
[[5, 1, 1, 3]]
[9]

我希望它为第四个结果打印四个数字,而不是它给我的三个。我在删除号码之前附加了列表。我错过了什么?

【问题讨论】:

  • 一切都是为了参考。

标签: python list append


【解决方案1】:

您添加了一个可变列表。当您稍后对其进行修改时,修改会影响您放置在列表中的对象,因为它是直接引用而不是副本。

制作列表副本的最简单方法是使用切片:

rollslist.append(stats[:])

【讨论】:

    【解决方案2】:

    正如 Avinash 所说,这是因为您仍然指的是 stats 列表。意思是,稍后所做的更改(如删除项目)仍将反映。对于预期的行为,您可以像这样make a copy of the list

    newCopy = list(stats)
    rollslist.append(newCopy)
    

    【讨论】: