Python引用和深 淺複製時的元素位址問題

2021-08-07 02:43:03 字數 636 閱讀 1836

a = [1,[2,3]]

b = a

引用只是單純的指向物件的位址,並不會對b物件開闢額外的空間當a發生變化時,b也發生變化,不產生額外空間

以下幾種與淺複製等價

- 切片操作 b=a[:]

- 工廠函式 b=list(a)

- copy函式 b=copy.copy(a)

import copy

a = [1,[2,3]] #1不可變物件,[2,3]是可變物件

b = copy.copy(a)

淺複製的時候,b物件開闢了額外的空間,當a不發生變化時,此時b物件的元素位址仍與a相同;當a的不可變物件的元素發生變化時,將會開闢新的空間,此時a該元素的改變不影響b,當a的可變物件的元素發生變化時,a和b可變物件的元素位址仍然相同。

import

copy

a = [1,[2

,3]]

b = copy.deepcopy(a)

淺複製的時候,b物件開闢了額外的空間,當a不發生變化時,此時b物件的元素位址仍與a相同;當a發生變化時,不管a變化的是可變物件還是不可變物件的元素,a都會開闢新的空間,且都不影響b。

Python 深淺複製

python中的賦值語句不複製物件,它們在目標和物件之間建立繫結。對於可變的或包含可變項的容器,有時需要乙個副本,所以可以改變乙個副本而不改變另乙個。將建立乙個新物件,但它包含的是對原始物件包含的項的引用。a b list a c a.copy d copy.copy a 建立乙個新物件,並且遞迴的...

python深淺複製 Python中的深淺拷貝

1.什麼是深淺拷貝?python中一切皆物件,python中的數字 字串 元組等,如果存放在了記憶體中,這部分記憶體裡面的內容是不會改變的,但是也有情況,記憶體中存放了可變物件,比如說列表和字典,他們的記憶體空間是可以被修改的。下面我們定義乙個列表 list 1,2,3,4,5 list1 list...

Python中的深淺複製

最近遇到了乙個問題,在python中對於物件的複製有兩種,copy 以及deepcopy 為了研究他們之間的區別,寫下如下部落格。首先檢視python的官方文件,得到如下解釋 淺層複製和深層複製之間的區別僅與復合物件 即包含其他物件的物件,如列表或類的例項 相關 乙個 淺層複製 會構造乙個新的復合物...