程式码如下:

a=[]
b=[3,2,1]
for i in range(1,4):
a.append(b)
b[1] = b[1] + i
print(a)

我预想a的结果应该是[[3,2,1],[3,3,1],[3,5,1]]实际上a的结果是[[3,8,1],[3,8,1],[3,8,1]]也就是list每次append的是将b这个list变数丢入a中查了资料,原来python是pass by reference的所以b的最终运算结果都会反映在a之中

请问要如何修改才能得到我所预想的结果呢?感谢

1 个回答

5

hokou

iT邦好手 1 级 ‧ 2025-02-21 15:23:19

最佳解答

试试看

a=[]
b=[3,2,1]
for i in range(1,4):
    c = b.copy()
    a.append(c)
    b[1] = b[1] + i
print(a)

# [[3, 2, 1], [3, 3, 1], [3, 5, 1]]

  • 1

lsesroom

iT邦新手 2 级 ‧
2025-02-21 15:32:06

Python原来有浅複製跟深複製的作法,感谢

修改