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。