Python 值型別 引用型別 和 深拷貝 淺拷貝 (九)
阿新 • • 發佈:2019-01-06
值型別:物件本身不允許修改,比如字串,數值,元組
對列表字典的修改則是修改該物件本身
引用型別:物件本身可以修改,比如列表,字典等
我們對字串,數值的修改實際上是讓變數指向了一個新的物件
a = 10
print id(a)
a = 20
print id(a)
輸出:33521053L
27629312L
對列表字典的修改則是修改該物件本身
l = [1,2,3]
print id(l)
l[0] = 0
print id(l)
輸出:39774280L
39774280L
淺拷貝就是對引用的拷貝,深拷貝則是對物件的資源的拷貝,Python在賦值的時候預設的是淺拷貝
a = [1,2,3]
b = a
print id(a),id(b)
輸出:35251721L 35251721L
可以使用copy.copy()或copy.deepcopy()來對物件進行深拷貝
a = [1,2,3]
b = copy.copy(a)
print id(a),id(b)
輸出:39774280L 39805448L
注意:對於值型別的資料深拷貝是無效的
a = 10
b = copy.deepcopy(a)
print id(a),id(b)
輸出:30628880L 30628880L
對於引用型別的資料傳參只是對引用的拷貝,當在引用的方法中修改了值,則該值在後其他引用中的值也會隨著改變def test(l):
l[0] = 9
l = [1,2,3]
test(l)
print l