python物件的比較與複製

2021-09-22 02:24:25 字數 1376 閱讀 8894

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

一般有三種方法:直接賦值法,copy淺拷貝法,deepcopy深拷貝法

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

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

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

b=alist

print(alist)#[1,2,3,["a","b"],5]

print(b)#[1,2,3,["a","b"],5]

示意圖: 

(2)copy淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件會改變

import copy

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

c=copy.copy(alist)

print(alist)#[1, 2, 3, ['a', 'b'], 5]變了

print(c)#[1, 2, 3, ['a', 'b']]沒變

print(alist)#[1, 2, 3, ['a', 'b', 'c'], 5]

print(c)#[1, 2, 3, ['a', 'b', 'c']]變了

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

import copy

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

c=copy.deepcopy(alist)

print(alist)#[1, 2, 3, ['a', 'b'], 5]

print(c)#[1, 2, 3, ['a', 'b']]#沒變

print(alist)#[1, 2, 3, ['a', 'b', 'c'], 5]

print(c)#[1, 2, 3, ['a', 'b']]#沒變

Python中物件的引用與複製

在python進行像b a這樣的賦值時,只會建立乙個對a的新引用,使a的引用計數加1,而不會建立新的物件 a xyz import sys sys.getrefcount a 3 b a sys.getrefcount b 4 id a 88292288l id b 88292288l 這樣,當引用...

Python中物件的引用與複製

在python進行像b a這樣的賦值時,只會建立乙個對a的新引用,使a的引用計數加1,而不會建立新的物件 a xyz import sys sys.getrefcount a 3 b a sys.getrefcount b 4 id a 88292288l id b 88292288l 這樣,當引用...

物件複製與淺複製

a 15 echo a.輸出15 b a echo b.輸出15 b 25 echo b.輸出25 echo a.輸出15 可以發現,普通變數是值傳遞,在不同的記憶體空間,其中乙個改變對於另乙個沒有影響 class student public function setage age public ...