python深淺copy和賦值

2022-05-17 10:48:55 字數 2208 閱讀 3364

基於引用和物件(python引用和物件分離)

直接賦值:a = b --》a,b兩個引用指向相同的物件

淺copy:a為b的copy --》 copy(新建)b的不可變子物件,共用可變子物件

深copy:a為b的深copy--》copy(新建)b的所有子物件,兩者物件無關聯

詳細解析如下:

在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用

一般有三種方法,

alist=[1,2,3,["a","b"]]

(1)直接賦值,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變

(2)copy淺拷貝,沒有拷貝可變子物件。共享可變子物件(可變子物件隨之變化)

(3)深拷貝,包含物件裡面的子物件的拷貝,所以原始物件的改變不會造成深拷貝裡任何子元素的改變

>>> import copy

>>> d=copy.deepcopy(alist)

>>> print alist;print d

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]始終沒有改變

參考部落格:

在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用

一般有三種方法,

alist=[1,2,3,["a","b"]]

(1)直接賦值,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變

(2)copy淺拷貝,沒有拷貝可變子物件。共享可變子物件(可變子物件隨之變化)

(3)深拷貝,包含物件裡面的子物件的拷貝,所以原始物件的改變不會造成深拷貝裡任何子元素的改變

>>> import copy

>>> d=copy.deepcopy(alist)

>>> print alist;print d

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]始終沒有改變

Python賦值 深淺copy

在 python 中,物件的賦值就是簡單的物件引用,這點和 c 不同,如下所示 a 1,2,hello python c b a在上述情況下,a 和 b 是一樣的,他們指向同一片記憶體,b 不過是 a 的別名,是引用.我們可以使用 b is a 去判斷,返回 true,表明他們位址相同,內容相同,也...

python 賦值 比較 深淺copy

物件的三個要素id,型別,值。id 指的是記憶體位址,id 相同則兩個物件完全相同 賦值運算,a b,指的是b 的id 與a 相同,b 的資料與a 指向相同的記憶體空間 is 判斷,返回true false,a is b 判斷a 與 b 的id 是否相同 判斷,等號兩邊的值相等 練習1a 123 b...

賦值運算與深淺copy

1 複製運算 l1 1,2,3,a b l2 l1 l1 0 111 print l1 111,2,3,a b print l2 111,2,3,a b l1 3 0 hello print l1 111,2,3,hello b print l2 111,2,3,hello b 所以,對於賦值運算來...