Python 列表賦值 淺拷貝 深拷貝 02

2021-08-27 08:15:57 字數 2304 閱讀 9831

」』

關於python中列表、字典的深淺拷貝問題之前認識比較模糊,之前的筆記中其實只是區分了拷貝和賦值的問題,

今天以列表為例重新學習一下:

關於深淺拷貝和賦值的概念:

a.直接賦值: 用等號 = ,其實就是物件的引用

b.淺拷貝: 用copy( ),拷貝父物件,但是不會拷貝內部子物件

c.深度拷貝: 用deepcopy,是採用大模組copy中的deepcopy方法,完全拷貝父物件和子物件

」』

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import copy

defprint_all_list

(a=,b=,c=,d=,e=,f=,log=''):

print log

print

"a:", a

print

"b:", b

print

"c:", c

print

"d:", d

print

"e:", e

print

"f:", f

if __name__ == "__main__":

a = [0,1,2,3,[4,5,6],[7,8,9]]

b = a ## 直接賦值

c = copy.copy(a) ## 淺拷貝

d = copy.deepcopy(a) ## 深拷貝

e = list(a) ## 待測試

f = a[:] ## 待測試

print_all_list(a,b,c,d,e,f,"初始:a為原列表,b為賦值,c為淺拷貝,d為深拷貝,e&f待測試")

print_all_list(a,b,c,d,e,f,"給a新增了乙個列表元素[0,0,0]")

## 可以看到直接賦值的b也發生改變了,說明:a.直接賦值——就是對物件的引用

print_all_list(a,b,c,d,e,f,"對a索引為4的子物件[4,5,6]操作,增加乙個元素100")

## 可以看到除直接賦值的情況外,淺拷貝的索引為4的子物件也發生了變化。

## 說明淺拷貝只拷貝父物件,但是不會拷貝內部子物件。對於父物件中的子物件只是進行索引。

## 而深拷貝,則是完全建立了乙個新的列表。

##最終可以看到,e=list(a)、f=a[:]兩種方式也是淺拷貝。

'''輸出

初始:a為原列表,b為賦值,c為淺拷貝,d為深拷貝,e&f待測試

a: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

b: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

c: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

d: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

e: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

f: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

給a新增了乙個列表元素[0,0,0]

a: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9], [0, 0, 0]]

b: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9], [0, 0, 0]]

c: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

d: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

e: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

f: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

對a索引為4的子物件[4,5,6]操作,增加乙個元素100

a: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9], [0, 0, 0]]

b: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9], [0, 0, 0]]

c: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9]]

d: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]

e: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9]]

f: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9]]

'''

js 淺拷貝直接賦值 js的賦值與淺拷貝 深拷貝

昨天翻了下陣列api,看到concat和slice方法,突然想到這個兩個方法是淺拷貝還是深拷貝,結果陷入了死胡同,為什麼mdn文件說是淺拷貝,但進行簡單的操作為什麼能複製成功啊,糾結半天後才弄清原由,原來我一直把賦值和深淺拷貝搞混了。首先不要把引用型別的賦值歸結為淺拷貝,深拷貝和淺拷貝只針對像 ob...

Python 列表的 賦值拷貝 淺拷貝與深拷貝

一 文字說明 在對原有列表進行操作的時候,很有可能會修改原有列表的值,所以根據需要在這之前最好先將原有列表拷貝乙份,在對它的副本進行操作,而原列表保持不變。這個時候就需要注意 如何拷貝 的問題,因為它牽扯到 對於你新拷貝出來的列表進行操作是否還是會修改原有列表的值。通過學習,我有以下總結,對於列表一...

Python 賦值 淺拷貝 深拷貝

賦值 a b,只拷貝了物件的引用,沒有拷貝內容。兩個物件的id一樣 淺拷貝 copy.copy 構造乙個新的復合物件,然後將子物件引用插入到原始物件的副本中。深拷貝 copy.deepcopy 構造乙個新的復合物件,然後遞迴地將子物件副本插入原始物件的副本。給個栗子 從這個栗子可以看出,對c進行修改...