python序列的深拷貝和淺拷貝

2022-08-03 19:06:19 字數 3075 閱讀 5756

列舉:數值,字串、元組、位元組串

num = 123mystr = '

abc'

print

(id(num), num)

print

(id(mystr), mystr)

num = 456mystr = '

def'

print('

修改後...')

print

(id(num), num)

print

(id(mystr), mystr)

#結果:

140704113688128 123

1853358409744abc

修改...

1853359869712 456

1853361326544 def

表面上是對變數的修改,其實質是重新建立了物件,將引用賦給了變數,原來的物件被系統**。

列舉: 列表、字典、位元組陣列、物件

淺拷貝只拷貝可變型別的引用,在拷貝後的物件中對可變型別的修改會影響到原物件。

有幾種方式實現:

1. 完全切片操作

2. 利用系統函式list(), dict()

3. 利用copy模組的copy函式

ll = ['

xiao

', ['

china

', 32]]

la =copy(ll)

lb =copy(ll)

print

(id(ll), ll)

print

(id(la), la)

print

(id(lb), lb)

print('

change...')

la[0] = '

zhang

'la[1][0] = '

usa'

la[1][1] = 40

print

(id(ll), ll)

print

(id(la), la)

print

(id(lb), lb)

#結果:

3006259174856 ['

xiao

', ['

china

', 32]]

3006259174536 ['

xiao

', ['

china

', 32]]

3006259174600 ['

xiao

', ['

china

', 32]]

change...

3006259174856 ['

xiao

', ['

usa', 40]]

3006259174536 ['

zhang

', ['

usa', 40]]

3006259174600 ['

xiao

', ['

usa', 40]]

對比淺拷貝,深拷貝利用copy模組的deepcopy()函式會完全拷貝出獨立的物件來。

ll = ['

xiao

', ['

china

', 32]]

la =deepcopy(ll)

lb =deepcopy(ll)

print

(id(ll), ll)

print

(id(la), la)

print

(id(lb), lb)

print('

change...')

la[0] = '

zhang

'la[1][0] = '

usa'

la[1][1] = 40lb[0] = '

wang

'lb[1][0] = '

japan

'lb[1][1] = 49

print

(id(ll), ll)

print

(id(la), la)

print

(id(lb), lb)

#結果:

1957762145864 ['

xiao

', ['

china

', 32]]

1957762145544 ['

xiao

', ['

china

', 32]]

1957762145672 ['

xiao

', ['

china

', 32]]

change...

1957762145864 ['

xiao

', ['

china

', 32]]

1957762145544 ['

zhang

', ['

usa', 40]]

1957762145672 ['

wang

', ['

japan

', 49]]

元組中的列表不可以修改嗎?

tt = (12, 33, [44, 55, 66])

print

(tt)#修改

tt[2][0] =0

print

(tt)

#結果:

(12, 33, [44, 55, 66])

(12, 33, [0, 55, 66])

## 元組中的元素tt[2]不可更改為其他內容,單列表中的元素可以隨意修改。

列表中的元組可以修改嗎?

dd = [1, 2, 3, 4, (7, 8, 9)]

print

(dd)

dd[4] =0

print

(dd)

#結果:

[1, 2, 3, 4, (7, 8, 9)]

[1, 2, 3, 4, 0]

## 列表中元組內容不可修改,但dd[4]的值可修改。

前端的深拷貝和淺拷貝 前端面試 深拷貝和淺拷貝

面試題目 如何實現對乙個陣列或物件的淺拷貝和深拷貝?wtf,複製還分兩種,第一次遇到這種問題的時候很是無語呢,先來看看一般的答案的理解。淺拷貝是只拷貝一層,深層次的物件級別就只拷貝引用。深拷貝是拷貝多層,每一級別的資料都拷貝出來。也就是說,基本資料型別其實不存在深淺拷貝的問題,只有物件和陣列才存在深...

轉 Python深複製淺複製or深拷貝淺拷貝

copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很容易理解 a是乙個...

python 深拷貝 Python深拷貝和淺拷貝!

在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用 一般有三種方法,alist 1,2,3,a b 1 直接賦值 b alist,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變...