gpt4 book ai didi

python - 为什么这个列表会改变值(value)?

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:09 25 4
gpt4 key购买 nike

我有一个名为 oneslist,它在不应影响它的代码块之后更改值。为什么?

s = 3

ones = []
terms = []
for i in range (0, s):
ones.append(1)
terms.append(ones)
print(terms)

twos = []
if len(ones) > 1:
twos.append(ones)
twos[-1].pop()
twos[-1][-1] = 2
print(twos)

print(terms)

输出:

[[1, 1, 1]]  # terms
[[1, 1, 2]] # twos
[1, 1, 2] # terms

对于上下文,我试图用它来开始解决这个英国信息学奥林匹克过去考试第 5 页上的问题:http://www.olympiad.org.uk/papers/2009/bio/bio09-exam.pdf .

最佳答案

这里:

twos.append(ones)

您正在向 ones 添加一个 reference,而不是它的值。查看区别:

In [1]: l1 = [1, 2, 3]

In [2]: l2 = []

In [3]: l2.append(l1)

In [4]: l2, l1
Out[4]: ([[1, 2, 3]], [1, 2, 3])

In [5]: l2[0][1] = 'test'

In [6]: l2, l1
Out[6]: ([[1, 'test', 3]], [1, 'test', 3])

为了避免这种情况,您可以使用 [:] 运算符提供副本:

In [7]: l1 = [1, 2, 3]

In [8]: l2 = []

In [9]: l2.append(l1[:])

In [10]: l2, l1
Out[10]: ([[1, 2, 3]], [1, 2, 3])

In [11]: l2[0][1] = 'test'

In [12]: l2, l1
Out[12]: ([[1, 'test', 3]], [1, 2, 3])

关于python - 为什么这个列表会改变值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48062114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com