python直接賦值、切片、淺拷貝和深拷貝


 

 
         
import copy

names = ['Amir', 'Barry', 'Cgakes', 'Dao', [11, 22, 33]]

# 直接賦值,指向同一個內存地址
names1 = names

# 淺拷貝:重新分配一塊內存,創建一個新的對象,里面的元素是指原對象中子對象的引用
names2 = list(names)# 數據類型本身的構造器
names3 = names1[:] # 切片
names4 = copy.copy(names)

# 深拷貝:遞歸地拷貝原對象中的每一個子對象
names5 = copy.deepcopy(names)
names1[0] = 'haha'
names1[-1][0] = 44

print(names1)
print(names2)
print(names3)
print(names4)
print(names5)

# 輸出
"""
['haha', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父對象和子對象都指向同一個內存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父對象獨立,子對象都指向同一個內存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父對象獨立,子對象都指向同一個內存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父對象獨立,子對象都指向同一個內存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [11, 22, 33]]#父對象和子對象都是獨立的
"""
 

 

總結:
賦值就是系統先給一個對象分配了內存地址,然后再將內存地址指向另一個對象,如a=b
淺拷貝是父對象獨立,但是子對象指向同一個內存地址
  通常用數據類型本身的構造器如list(),set()
  python提供的函數copy.copy()可以適用於任何數據類型
  對於可變序列,可以通過切片操作符':'來完成淺拷貝
深拷貝是和原來的父子對象完全獨立,父對象和子對象都指向完全不同的內存地址,copy.deepcopy()
相同值的可變類型的內存地址是不一樣的,但是修改時不需要開辟一塊新的空間,只需修改原內存地址就行了
相同值的不可變類型的內存地址是一樣的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM