zoukankan      html  css  js  c++  java
  • 关于numpy的浅拷贝

    浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

    示例:

    import numpy as np
    a=np.array([1,2,3])
    b=[]
    for i in range(0,2):
        a+=1
        b.append(a)
    print(b)
    

    运行结果为:

    [array([3, 4, 5]), array([3, 4, 5])]

    使用copy方法以获得深拷贝。

    import numpy as np
    a=np.array([1,2,3])
    b=[]
    for i in range(0,2):
        a+=1
        b.append(a.copy())
    print(b)
    

    运行结果为:

    [array([2, 3, 4]), array([3, 4, 5])]

    另外,转为list也可以避免浅拷贝。

    import numpy as np
    a=np.array([1,2,3])
    b=[]
    for i in range(0,2):
        a+=1
        b.append(a.tolist())
    print(b)
    

    运行结果为:

    [[2, 3, 4], [3, 4, 5]]

    补充

    有一个和上述问题类似的现象,当我想创建一个双层列表时,我一开始是这样做的,但是并不正确,因为列表中的所有元素都是同时变化的。

    lists = [[]]*3
    lists[0].append('1')
    print(lists)

    它的输出是:[['1'], ['1'], ['1']]

    用下面这种方法才可以创建相互独立的元素。

    lists = [[] for _ in range(0,3)]
    lists[0].append('1')
    print(lists)

    运行结果为[['1'], [], []]

  • 相关阅读:
    二人组
    对于软件工程的理解
    shell 远程链接
    shell变量
    shell教程
    正则表达式--练习
    git--版本库
    git-版本回退
    git--时光穿梭
    git安装
  • 原文地址:https://www.cnblogs.com/dingdangsunny/p/15124539.html
Copyright © 2011-2022 走看看