首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Numpy 模块基础学习(7)

Numpy 模块基础学习(7)

7. 数组的copy与deep copy

数组的复制与list复制方式类似,分浅复制与深度复制,简单的复制是使几个变量指向同一个指针,因此这几个变量中的一个改变,其余的几个也会跟着改变,而deep copy方式是将一个变量的值赋给另一个变量,两者指向不同的指针,只是值相同。

    >>>import numpy as np
    >>>a=np.arange(4)
    >>>a
    array([0, 1, 2, 3])
    >>>b=a
    >>>c=b
    >>>d=c       # a,b,c,d四个变量指向同一个地址
    >>>e=a.copy() # 将a的值赋给e,两者指向不同的地址
    >>>a[3]=10
    >>>a
    array([ 0,  1,  2, 10])
    >>>b
    array([ 0,  1,  2, 10])
    >>>e
    array([0, 1, 2, 3])

奇怪的是当使用[:]的复制方式时与列表复制出现了不同的结果,列表中的[:]与copy复制效果是相同的,而在数组中却出现了不同,数组中[:]复制的两个变量的变化仍然保持一致性

    >>>import numpy as np
    >>>a=np.arange(4)
    >>>b=a
    >>>c=a[:]
    >>>d=a.copy()
    >>>a[3]=10
    >>>id(a)
    140572616448320
    >>>id(b)
    140572616448320         # a,b的指针地址相同
    >>>id(c)
    140572616446080
    >>>id(d)
    140572616448640 
    >>>a
    array([ 0,  1,  2, 10])
    >>>b
    array([ 0,  1,  2, 10])
    >>>c
    array([ 0,  1,  2, 10]) # a,c的指针地址不同,变化却是一致的
    >>>d
    array([0, 1, 2, 3])
返回列表