代码之家  ›  专栏  ›  技术社区  ›  cs95 abhishek58g

为什么np.ndarray__deepcopy_uuu需要多余的参数?[副本]

  •  4
  • cs95 abhishek58g  · 技术社区  · 7 年前

    副本将回答 what ,但不能充分回答 why 或者为什么文件中没有提及,即使它是必需的。继续阅读了解更多。。。


    有两种方法可以制作numpy数组的深度副本。一种方法是使用 copy.deepcopy copy 单元另一种方法是打电话 array.__deepcopy__ 直接地

    docs

    ndarray.__deepcopy__() → Deep copy of array.
    

    copy.deepcopy复制 在数组上调用。

    In [47]: x
    Out[47]: 
    array([[1, 1],
           [2, 2]])
    
    In [48]: x.__deepcopy__()
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-48-00c3b8eda618> in <module>()
    ----> 1 x.__deepcopy__()
    
    TypeError: __deepcopy__() takes exactly 1 argument (0 given)
    

    A. TypeError

    In [51]: x.__deepcopy__(None)
    Out[51]: 
    array([[1, 1],
           [2, 2]])
    

    甚至。。。

    In [52]: x.__deepcopy__([12345, 'blah blah'])
    Out[52]: 
    array([[1, 1],
           [2, 2]])
    

    这个函数似乎需要一个参数,但该参数应该与返回的副本无关。

    1 回复  |  直到 7 年前
        1
  •  1
  •   MB-F    7 年前

    Python需要 __deepcopy__() 方法获取一个参数 memo docs ):

    为了让类定义自己的复制实现,它可以定义特殊的方法 __copy__() __深度复制() 调用前者以实现浅层复制操作;没有传递其他参数。调用后者来实现深度复制操作; __深度复制() 实现需要对组件进行深度复制,它应该调用 deepcopy() 函数的第一个参数为组件,第二个参数为备忘录字典。

    我想numpy不需要使用这个参数,因为数组通常不包含对其他Python对象的递归引用,所以它被忽略了。