别名、浅复制与深复制
生活随笔
收集整理的這篇文章主要介紹了
别名、浅复制与深复制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
別名
別名就是起另一個名字,實際上是同一個東西,地址完全一樣,改變任意一個的值,另一個會隨著改變。
person_info = ['age: 18', ['beijing', 'wuhan']] info_other_name = person_info # 別名,他們是在同一個地址上,改變任意一個,另外的跟著改變(可以減少不必要的內存開銷) print id(info_other_name), id(person_info) # 地址一樣 person_info[0] = 'age: 23' # 改變原地址年齡,info_other_name也跟著變,因為就是一個東西 print u'原來的值', person_info print u'別名的值', info_other_name?
輸出結果
47750200 47750200 原來的值 ['age: 23', ['beijing', 'wuhan']] 別名的值 ['age: 23', ['beijing', 'wuhan']]?
淺復制
淺復制表示只復制表面一層,再深的層次還是指向他原來的地址。
import copy person_info = ['age: 18', ['beijing', 'wuhan']] info_shallow_copy = copy.copy(person_info) # 淺復制 只復制第一層,其他層還是指向它原來的地址 print id(info_shallow_copy), id(person_info) # 地址不一樣 person_info[0] = 'age: 23' # 此處改年齡,person并沒有跟著改變 person_info[1].remove('wuhan') # 刪除列表里的下一級列表,會跟著改變 print u'原來的值', person_info print u'淺復制的值', info_shallow_copy輸出結果
47791200 47769360 # 地址不一樣 原來的值 ['age: 23', ['beijing']] 淺復制的值 ['age: 18', ['beijing']] # 表面上的一層(年齡),獨立于原來的值,但往下一層指向的地址還是原來的指向?
深復制
深復制之后,所有的內容都獨立于原變量存在。
import copy person_info = ['age: 18', ['beijing', 'wuhan']] info_deep_copy = copy.deepcopy(person_info) # 深復制 全部都都復制過來,都不會跟著改變 print id(info_deep_copy), id(person_info) # 地址不一樣 person_info[0] = 'age: 23' person_info[1].remove('wuhan') print u'原來的值',person_info print u'深復制的值',info_deep_copy輸出結果
54781712 54859536 原來的值 ['age: 23', ['beijing']] 深復制的值 ['age: 18', ['beijing', 'wuhan']] # 完全獨立于原來的變量?
轉載于:https://www.cnblogs.com/huahua12/p/8531017.html
總結
以上是生活随笔為你收集整理的别名、浅复制与深复制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++小知识积累
- 下一篇: python IDLE中反斜杠显示为人民