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()