iT邦幫忙

1

Python的list基礎問題

  • 分享至 

  • xImage

程式碼如下:

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之中

請問要如何修改才能得到我所預想的結果呢?感謝

圖片
  熱門推薦
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

6
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]]
lsesroom iT邦新手 2 級 ‧ 2025-02-21 15:32:06 檢舉

Python原來有淺複製跟深複製的作法,感謝

我要發表回答

立即登入回答