1. 程式人生 > >python3中的淺拷貝與深拷貝

python3中的淺拷貝與深拷貝

import copy
def f(x):
    return x
a = [["a", "b"],1,2,3, "d"]
b = copy.copy(a)
c = copy.deepcopy(a)
d = a.copy()
e = f(a)
a[0].append("c")
a[1] = 0
a[-1] = a[-1].upper()
print(a)                    #[['a', 'b', 'c'], 0, 2, 3, 'D']
print(b, id(b) == id(a))    #[['a', 'b', 'c'], 1, 2, 3, 'd'] False
print(c, id(c) == id(a))    #[['a', 'b'], 1, 2, 3, 'd'] False
print(d, id(d) == id(a))    #[['a', 'b', 'c'], 1, 2, 3, 'd'] False
print(e, id(e) == id(a))    #[['a', 'b', 'c'], 0, 2, 3, 'D'] True

在上面的程式碼中列表a中又包含一個列表和一個字串。所以在使用copy進行淺拷貝得到b和d,更改a中索引值為0,1,-1的元素,b和d中只有索引值為0被更改,而且b和d的地址和a又不相同,所以可以看出,淺拷貝建立了一個新的物件,但是新物件中所儲存的物件並沒有被拷貝(和原有的物件用的是同一個地址)。

而深拷貝顯然是將要拷貝的物件和其子物件都進行了拷貝。

而且還看出將字串都變為大寫,是重新建立了一個新的物件。=。=