BDD 参考文章

Python 中 list 的拷贝与 numpy 的 array 的拷贝

1.python中列表list的拷贝,会有什么需要注意的呢?

Python 变量名相当于标签名。

list2=list1 直接赋值,实质上指向的是同一个内存值。任意一个变量 list1(或list2)发生改变,都会影响另一个 list2(或list1)。

例如:

>>> list1=[1,2,3,4,5,6]
>>> list2=list1
>>> list1[2]=88
>>> list1
[1, 2, 88, 4, 5, 6]
>>> list2
[1, 2, 88, 4, 5, 6]

而 list3 和 list4 是通过切片对 list1 的复制操作,分别指向了新的值。任意改变 list3 或 list4 的值,不会影响其他。

2.要使用 ndarray 类型的数组,需要 from numpy import * 引用工具包 numpy。

而对 ndarray 类型的数据进行拷贝时,跟 list 类型有一点区别。

数组切片是原始数组的视图,这意味着数据不会被复制,视图上的任何修改都会被直接反映到源数组上。

array1, array2, array3, array4 实际指向同一个内存值,任意修改其中的一个变量,其他变量值都会被修改。

若想要得到的是 ndarray 切片的一份副本而非视图,就需要显式的进行复制操作函数 copy()。

例如:

array5=array1.copy()      # 对原始的 array1 的复制 
array6=array1[1:4].copy() # 对切片 array1[1:4] 的复制 

那么,修改 array5 或 array6,就不会影响 array1。