2 回答

TA貢獻1824條經驗 獲得超8個贊
您必須使用deepcopy復制所有內容,否則您只會復制頂級列表。
例如:
from random import *
from copy import deepcopy
a = [[0,5,9,5,9,4,0,0,5],
[0,0,7,0,0,3,0,0,3],
[0,0,5,0,0,0,7,8,45]]
#use this
b=deepcopy(a)
#instead of this
#b = a.copy()
for x in range(len(b)):
for y in range(len(b[1])):
if b[x][y] == 0:
b[x][y] = randint(10, 100000)
if a == b:
print("Not working")
print(b)
print(a)
您可以在官方文檔中了解淺拷貝和深拷貝的區別。

TA貢獻1871條經驗 獲得超13個贊
你有一個列表列表,因此你需要deepcopy a避免變異a:
import copy
a = [[0,5,9,5,9,4,0,0,5],
[0,0,7,0,0,3,0,0,3],
[0,0,5,0,0,0,7,8,45]]
b = copy.deepcopy(a)
簡短說明:您復制 list 的外部“結構” a,而“內部結構”仍然由對“子”級列表的引用組成。因此第二層b仍然指的是相同的元素a。copy.deepcopy通過將對象的所有可變元素向下復制到一定深度來避免這個問題。
添加回答
舉報