python 中的拷貝 淺拷貝與深拷貝

2021-06-22 05:18:01 字數 1783 閱讀 1297

0.

序列指什麼?

序列型別是指容器內的元素從0開始的索引順序訪問,一次可以訪問乙個或者多個元素,包括字串(string)、元組(tuple)、列表(list):
the difference between tuple and list:
tuple would not be changed, but list would.
>>> a = (1,2,3)

>>> b = [1,2,3]

traceback (most recent call last):

1.什麼是拷貝?
copy操作意味著兩個在記憶體中不同的物件,所以對應的id也是不一樣的。
>>> ls1 = [1,2,3]

>>> ls2 = ls1[:]

>>> id(ls1),id(ls2)

(140439195044104, 140439195058760)

>>> tp1 = (1,2,3)

>>> tp2 = ls1[:]

>>> id(tp1),id(tp2)

(140439194958816, 140439194958816)

為什麼tuple的id沒有變化而list的tuple發生了變化了呢?這個是由於python直譯器的實現導致的,由於tuple是immutable的,所以說沒有必要在記憶體裡維護多個一樣字面意義的tuple,因此python對於tuple的copy操作,實際上是增加了乙個reference count而已,並沒有做真正的copy,所以id的返回值是一樣的。

這是淺拷貝還是深拷貝?

一般以下所得到的都是淺拷貝:

2.什麼是淺拷貝?

淺拷貝是指當序列中包含容器時,拷貝後新序列的容器只是原序列容器的引用

>>> a = (1,3,5,[2,4])

>>> b = a[:]

>>> a,b

((1, 3, 5, [2, 4, 6]), (1, 3, 5, [2, 4, 6]))

3.什麼是深拷貝?
深拷貝是指拷貝後序列中的容器也拷貝過去,而不存在引用關係。

>>> c = copy.deepcopy(a)

>>> a,c

((1, 3, 5, [2, 4, 6]), (1, 3, 5, [2, 4, 6, 8]))

4.總結:
考察是不是淺拷貝的方法是兩者的容器是否指向同乙個位址。

python中淺拷貝與深拷貝

淺拷貝,拷貝的是父物件,不會拷貝到內部的子物件。單從乙個淺字就可以看出他拷貝的東西不深,可以理解為只拷貝一層 import copy a 1,ss 2,3 b copy.copy a print b print id a print id b 現在有乙個列表a裡面有數字,字串,列表和字典 用淺拷貝的...

Python中的淺拷貝與深拷貝

1.淺拷貝 情況1的例項如下 import copy a 1,2 b 3,4 c a,b 注意這裡的c就是乙個可變物件!d copy.copy c print 變數c c print print 變數d d 結果 變數c 1,2 3,4 變數d 1,2 3,4 原因分析 需要拷貝的物件c是乙個lis...

python中的深拷貝與淺拷貝

在python中拷貝預設為淺拷貝,因為占用時間和記憶體交少 淺拷貝 num list1 1 2,3 1,2,3 4,5 6,7 8,9 num list2 num list1.copy print before print num list1 print num list2 num list2 2 ...