举例 1: 赋值不会发生复制,会影响原数据
import numpy as np
a = np.arange(6)
print('我们的数组是:', a)
print('调用 id() 函数:', id(a))
b = a
print('\na 赋值给 b:', b)
print('b 拥有相同 id():', id(b))
b.shape = 3, 2
print('\n修改 b 的形状:')
print(b)
print('\na 的形状也修改了:')
print(a)
举例 2: 切片会复制,也会影响原数据
import numpy as np
arr = np.arange(12)
print('我们的数组:', arr)
print('\n---- 创建切片,并修改切片的值 ----')
a = arr[3:]
b = arr[3:]
a[1] = 123
print(a)
b[2] = 234
print(a)
print(b)
print('数组arr会随之改变:', arr)
print("a,b 的id是不同的:", id(a), id(b), id(arr[3:]))
举例 3: 视图或浅拷贝 ndarray.view()
会产生副本,副本与源数据的物理内存不在同一位置,修改副本不影响源数据
import numpy as np
a = np.arange(6).reshape(3, 2)
print('数组 a:')
print(a)
b = a.view()
print('\n创建 a 的视图:')
print(b)
print('\n两个数组的 id() 不同:')
print('a 的 id():', id(a))
print('b 的 id():', id(b))
b.shape = 2, 3
print('\nb 的形状:')
print(b)
print('\na 的形状:')
print(a)
举例 4: 副本或深拷贝
ndarray.copy() 函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。
import numpy as np
a = np.array([[10, 10], [2, 3], [4, 5]])
print('数组 a:')
print(a)
print('\n创建 a 的深层副本:')
b = a.copy()
print('数组 b:')
print(b)
print('\n我们能够写入 b 来写入 a 吗?', b is a)
print('\n修改 b 的内容:')
b[0, 0] = 100
print('修改后的数组 b:')
print(b)
print('\na 保持不变:')
print(a)
|