直接賦值和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'],如何修改?