【问题标题】:Python issue with for loop and append [duplicate]for循环和追加的Python问题[重复]
【发布时间】:2020-10-10 16:51:19
【问题描述】:

我无法理解一段 python 代码的输出。

mani=[]
nima=[]
for i in range(3)
    nima.append(i)
    mani.append(nima)

print(mani)

输出是

[[0,1,2], [0,1,2], [0,1,2]] 

我一生都无法理解为什么不是

[[0], [0,1], [0,1,2]]

非常感谢任何帮助。

【问题讨论】:

标签: python for-loop append


【解决方案1】:

这是因为当您将 nima 附加到 mani 时,它不是 nima 的副本,而是对 nima 的引用。

所以随着 nima 的变化,mani 中每个位置的引用都指向变化的 nima。

由于 nima 以 [0, 1, 2] 结尾,因此附加到 mani 中的每个引用都指向同一个对象。

【讨论】:

  • 因为 List 是可变的,它可以在创建后更改。 :)
  • 啊哈,这就是我理解的漏洞。我过去主要使用matlab,如果我没记错的话,它可以与副本一起使用,而不是在这种情况下引用(我认为无论如何!)。非常感谢。
【解决方案2】:

按照某些人的建议完成,您应该使用copy 模块。您的代码如下所示:

import copy

mani=[]
nima=[]
for i in range(3):
    nima.append(i)
    mani.append(copy.copy(nima))

print(mani)

输出:

[[0], [0, 1], [0, 1, 2]]

【讨论】:

  • 是否有理由使用copy.copy() 而不是list.copy()?即mani.append(nima.copy())
【解决方案3】:

List 是可变的(可变序列创建后可以更改),可以看到使用 id 函数对同一个对象进行操作:

for i in mani:
    print(id(i))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    相关资源
    最近更新 更多