微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为每个对象复制具有无地址的对象数组

如何解决如何为每个对象复制具有无地址的对象数组

如果我使用copy.deepcopy()在同一地址复制5个对象的数组,它们将全部获得一个新地址,但仍然不会出错。我需要所有对象都是唯一的(在不同的地址)。

import numpy as np
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age


p = Person("John",10)
a = np.array([p,p,p])
new_arr = copy.deepcopy(a)

之前:

[<__main__.Person object at 0x7fa608716a60>
 <__main__.Person object at 0x7fa608716a60>
 <__main__.Person object at 0x7fa608716a60>
 <__main__.Person object at 0x7fa608716a60>
 <__main__.Person object at 0x7fa608716a60>]

之后:

[<__main__.Person object at 0x7fa608716520>
 <__main__.Person object at 0x7fa608716520>
 <__main__.Person object at 0x7fa608716520>
 <__main__.Person object at 0x7fa608716520>
 <__main__.Person object at 0x7fa608716520>]

这可行(但速度很慢)-我正在寻找最快的解决方案。想象一下,数组有1000000+个对象。

new_arr = []
for x in arr:
    new_arr.append(copy.copy(x))

应该如何

[<__main__.Person object at 0x7f40f6fdc5e0>
 <__main__.Person object at 0x7f40f7099100>
 <__main__.Person object at 0x7f40f7099e20>
 <__main__.Person object at 0x7f40f7099130>
 <__main__.Person object at 0x7f40f7090940>]

解决方法

更改您的类以实现copy(),以便deepcopy()在您的自定义对象上起作用。

from copy import deepcopy

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __copy__(self):
        return Person(self.name,self.age)

    def __deepcopy__(self,memo):
        return Person(deepcopy(self.name,memo),deepcopy(self.age,memo))
,

正如@khelwood所说,使用列表理解,但我不知道速度:

>>> import numpy as np
>>> import copy
>>> Class Person:
    def __init__(self,age):
        self.name = name
        self.age = age

        
>>> p = Person('John',42)
>>> p
<__main__.Person object at 0x0000017C55E06BB0>

>>> a = np.array([copy.deepcopy(p) for i in range(5)])
>>> a
array([<__main__.Person object at 0x0000017C64768580>,<__main__.Person object at 0x0000017C64768610>,<__main__.Person object at 0x0000017C64768670>,<__main__.Person object at 0x0000017C64768730>,<__main__.Person object at 0x0000017C64768790>],dtype=object)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?