python全棧闖關 7 3 深淺copy

2022-07-25 10:51:20 字數 1449 閱讀 6012

l1 = [1, 2, 3]

l2 =l1

print(l2)

可變資料型別,賦值複製後,更改其中乙個,另乙個將會發生改變。

為解決這一問題,需要對資料執行深淺copy

l1 = [1, 2, 3]

l2 =l1.copy()'a

')print

(l1)

print(l2)

使用copy方法,實現了列表的複製,但是對孫子輩,重孫輩無效

#

copy方法可以保證第一層的資料新增後不變

#但是第二層資料新增,同樣影響到copy後的列表

l1 = [1, 2, [4, 5, 6], 3]

l2 =l1.copy()'a

')print

(id(l1), id(l2))

print

(l1, l2)

第二層'

)print

(id(l1), id(l2))

print(l1, l2) #

[1, 2, [4, 5, 6, '第二層'], 3, 'a'] [1, 2, [4, 5, 6, '第二層'], 3]

print(id(l1[2]), id(l2[2])) #

3015533617800 3015533617800

從以上命令,可以看出,第二層依然指向相同的記憶體

import

copy

l1 = [1, 2, [4, 5, 6,[12,3,4]], 3]

l2 =copy.deepcopy(l1)

print("

第一層新增值")

'a')

print

(id(l1), id(l2))

print

(l1, l2)

print('

第二層新增值')

第二層'

)print

(id(l1), id(l2))

print(l1, l2) #

[1, 2, [4, 5, 6, [12, 3, 4], '第二層'], 3, 'a'] [1, 2, [4, 5, 6, [12, 3, 4]], 3]

print(id(l1[2]), id(l2[2])) #

3015535702088 3015535594056

第三層'

)print(id(l1[2][3]), id(l2[2][3])) #

3015535842120 3015535842440

print(l1,l2) #

[1, 2, [4, 5, 6, [12, 3, 4, '第三層'], '第二層'], 3, 'a'] [1, 2, [4, 5, 6, [12, 3, 4]], 3]

深copy後,列表所有的層級都分配獨立的記憶體,不在共享

python全棧闖關 6 小知識點總結

python2 print abc 返回乙個列表 range 返回乙個生成器值,不是list。每次只生成乙個值,避免暫用很大的記憶體 xrange 生成器 輸入 raw input python3 print abc 返回乙個迭代值,需要生成列表就需要使用list range range input...

python全棧要學什麼 python全棧學習路線

i程式設計客棧t行業,技術要比學歷 年齡 從業經驗更為重要,技術水平直接決定就業薪資,想要學好python,首先要先了解精通python語言基礎 python web開發 python爬蟲 python資料分析這四大方面。全棧即指的是全棧工程師,指掌握多種技能,並能利用多種技能獨立完成產品的人。就是...

python全棧 類 物件

類名推薦用駝峰命名 類體 在定義時就會執行,在例項化時只自動執行 init 類中存放的是物件共有的資料和功能,訪問位址都一樣 class student 記錄有多少例項化物件 count 0 init 內存放是為物件初始化屬性的功能,但是可以存放任意 想要在類呼叫時就立刻執行的 def init s...