python doc 3 —— 深複製,淺複製,賦值

copy模塊

首先導入模塊import copy
本節圖片來源[1]

1. 賦值語句

b = a, a和b指向的是同一個對象
在這裏插入圖片描述
賦值很常見,修改了即變化

a = [1, 2, 3, 4]
b = a

a.append(5)
# a = [1, 2, 3, 4, 5]
# b = [1, 2, 3, 4, 5]

a[1] += 5
# a = [1, 7, 3, 4, 5]
# b = [1, 7, 3, 4, 5]

2. 淺複製

b = copy.copy(a), a 和 b 是一個獨立的對象,但他們的子對象還是指向統一對象(是引用)

所謂“淺拷貝”,是指創建一個新的對象,其內容是原對象中元素的引用。(拷貝組合對象,不拷貝子對象)

在這裏插入圖片描述
a和b本質上已經是不同的對象了,但是子對象還是一樣的,如下面例子

a = [1, 2, 3, 4, ['a', 'b']]
# 其中['a', 'b']屬於子對象

b = copy.copy(a)
a.append(5)        		# 對象a和b已經不一樣了
# a = [1, 2, 3, 4, ['a', 'b'], 5]
# b = [1, 2, 3, 4, ['a', 'b']]

a[4].append('c')        # 子對象a[4]仍然是一樣的,所以也被修改了
# a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
# b = [1, 2, 3, 4, ['a', 'b', 'c']]

3. 深複製

在這裏插入圖片描述
深複製和賦值比較好理解,前者完全不同,後者完全相同

a = [1, 2, 3, 4, ['a', 'b']]
# 其中['a', 'b']屬於子對象

b = copy.deepcopy(a)
a.append(5)        		# 對象a和b已經不一樣了
# a = [1, 2, 3, 4, ['a', 'b'], 5]
# b = [1, 2, 3, 4, ['a', 'b']]

a[4].append('c')        # 子對象a[4]仍然是一樣的,所以也被修改了
# a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
# b = [1, 2, 3, 4, ['a', 'b']]

wait to write

numpy模塊

import numpy as np

a = np.array([[1,2,3],[4,5,6]])

a.view()
a.copy()

補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章