如何解决如何为每个对象复制具有无地址的对象数组
如果我使用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 举报,一经查实,本站将立刻删除。