python 直接賦值和copy的區別


直接賦值和copy的區別:

  • 直接賦值:其實就是對象的引用(別名)。
  • 淺拷貝(copy):拷貝父對象,不會拷貝對象的內部的子對象。
  • 深拷貝(deepcopy): copy 模塊的 deepcopy 方法,完全拷貝了父對象及其子對象。

例子:

dict1 =  {'user':'runoob','num':[1,2,3]}
 
dict2 = dict1             # 淺拷貝: 引用對象
dict3 = dict1.copy()   # 深拷貝:深拷貝父對象(一級目錄),子對象(二級目錄)不拷貝,還是引用
 
# 修改 data 數據
dict1['user']='root'
dict1['num'].remove(1)
 
# 輸出結果
print(dict1)
print(dict2)
print(dict3)

實例中 dict2 其實是 dict1 的引用(別名),所以輸出結果都是一致的,dict3 父對象進行了深拷貝,不會隨dict1 修改而修改,子對象是淺拷貝所以隨 dict1 的修改而修改。

{'user': 'root', 'num': [2, 3]}
{'user': 'root', 'num': [2, 3]}
{'user': 'runoob', 'num': [2, 3]}

 

例子:求打印的結果

def extend_list(val, list=[]):
    list.append(val)
    return list

list1 = extend_list(10)
list2 = extend_list(123, [])
list3 = extend_list('a')

print("list1 = %s" % list1)
print("list2 = %s" % list2)
print("list3 = %s" % list3)

輸出結果:

list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

 

如果預期輸出 list1 = [10, 'a'],list2 = [123],list3 = [10, 'a'],如何修改?


免責聲明!

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



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