1. 程式人生 > >Python 值型別 引用型別 和 深拷貝 淺拷貝 (九)

Python 值型別 引用型別 和 深拷貝 淺拷貝 (九)

值型別:物件本身不允許修改,比如字串,數值,元組

引用型別:物件本身可以修改,比如列表,字典等

我們對字串,數值的修改實際上是讓變數指向了一個新的物件

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