Python中賦值 淺複製和深複製的區別

2021-08-21 17:22:10 字數 1491 閱讀 2152

import copy

class moblephone:

def __init__(self,cpu,screen):

self.cpu=cpu

self.screen=screen

class cpu:

def calculate(self):

print("頂你個肺")

print("普尼**")

class screen:

def show(self):

print("看毛線")

print("biubiu",self)

print("測試變數賦值")

m1=cpu()

m2=m1

print(m1)

print(m2)

print("測試淺複製")

m3=screen()

m4=moblephone(m1,m3)

m5=copy.copy(m4)

print(m4,m4.cpu,m4.screen)

print(m5,m5.cpu,m5.screen)

print("測試深複製")

m6=copy.deepcopy(m4)

print(m4,m4.cpu,m4.screen)

print(m6,m6.cpu,m6.screen)

#返回值:

##測試變數賦值,位址相同

##<__main__.cpu object at 0x0000022af1a686d8>

##<__main__.cpu object at 0x0000022af1a686d8>

##測試淺複製,複製的物件位址不同,子物件位址相同

##<__main__.moblephone object at 0x0000022af1a68588> <__main__.cpu object at 0x0000022af1a686d8> <__main__.screen object at 0x0000022af1a68630>

##<__main__.moblephone object at 0x0000022af1a68f98> <__main__.cpu object at 0x0000022af1a686d8> <__main__.screen object at 0x0000022af1a68630>

##測試深複製,物件以及所有的子物件位址都不同

##<__main__.moblephone object at 0x0000022af1a68588> <__main__.cpu object at 0x0000022af1a686d8> <__main__.screen object at 0x0000022af1a68630>

##<__main__.moblephone object at 0x0000022af1a688d0> <__main__.cpu object at 0x0000022af1a6b6d8> <__main__.screen object at 0x0000022af1a6b5c0>

python中的copy模組 淺複製和深複製

在總結copy模組中的淺複製 copy 和深複製 deepcopy 前,先對 引用 做下說明 引用是指儲存的值為物件的位址。在 python 語言中,乙個變數儲存的值除了基本型別儲存的是值外,其它都是引用,因此對於它們的使用就需要小心一些。下面舉個例子 問題描述 已知乙個列表,求生成乙個新的列表,列...

python 深複製和淺複製

l1 1,2,3 4,5 l2 list l1 l1 1,2,3 4,5 99 l2 1,2,3 4,5 l1 1 remove 2 l1 1,3 4,5 99 l2 1,3 4,5 l2 1 11,12 l2 2 10,11 l1 1,3,11,12 4,5 99 l2 1,3,11,12 4,5...

python3中賦值 深複製和淺複製的區別

1 直接賦值 預設淺複製傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變。其實就是物件的引用 別名 2 淺複製 copy copy方法為淺複製,沒有複製子物件,所以原始資料改變,子物件會改變。3 深複製 deepcopy copy 模組的 deepcopy 方法,包含物件裡面的自物件的複...