亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python復制列表影響基本列表

python復制列表影響基本列表

幕布斯6054654 2023-02-22 16:00:14
所以在我的空閑時間里,我一直在嘗試制作一個小程序,但是我遇到了一個小問題。我想更改復制列表中的某些內容,但由于某種原因,更改會轉移到原始/基本列表中。from random import *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 = 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)我也嘗試過b = list(a)復制庫,但我對 b 的所有更改仍然轉移到 a,結果a == b為true。有人知道問題是什么或我做錯了什么/誤解了嗎?非常感謝并提前感謝您的幫助。
查看完整描述

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)

您可以在官方文檔中了解淺拷貝和深拷貝的區別。



查看完整回答
反對 回復 2023-02-22
?
慕桂英4014372

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通過將對象的所有可變元素向下復制到一定深度來避免這個問題。


查看完整回答
反對 回復 2023-02-22
  • 2 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號