gpt4 book ai didi

Python:copy.deepcopy 产生错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:25 52 4
gpt4 key购买 nike

我已经在很多需要它的类中使用这种复制方法很长一段时间了。

class population (list):
def __init__ (self):
pass

def copy(self):
return copy.deepcopy(self)

它突然开始产生这个错误:

     File "C:\Python26\lib\copy.py", line 338, in _reconstruct
state = deepcopy(state, memo)
File "C:\Python26\lib\copy.py", line 162, in deepcopy
y = copier(x, memo)
File "C:\Python26\lib\copy.py", line 255, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:\Python26\lib\copy.py", line 189, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "C:\Python26\lib\copy.py", line 323, in _reconstruct
y = callable(*args)
File "C:\Python26\lib\copy_reg.py", line 93, in __newobj__
return cls.__new__(cls, *args)
TypeError: object.__new__(generator) is not safe, use generator.__new__()
>>>

在我在这里复制的“第 338 行”之前,包含对第 338、162、255、189 行的引用的行重复了很多次。

最佳答案

您要克隆生成器吗? Generators can't be cloned.

在此处复制 Gabriel Genellina 的回答:


没有办法“克隆”生成器:

py> g = (i for i in [1,2,3])
py> type(g)()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot create 'generator' instances
py> g.gi_code = code
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: readonly attribute
py> import copy
py> copy.copy(g)
Traceback (most recent call last):
...
TypeError: object.__new__(generator) is not safe, use generator.__new__()
py> type(g).__new__
<built-in method __new__ of type object at 0x1E1CA560>

您可以使用生成器函数来做到这一点,因为它充当“生成器
工厂”,在调用时构建一个新的生成器。甚至使用 Python C
API,要创建一个生成器,需要一个框架对象——但没有办法
创建一个我知道的“即时”框架对象:(

py> import ctypes
py> PyGen_New = ctypes.pythonapi.PyGen_New
py> PyGen_New.argtypes = [ctypes.py_object]
py> PyGen_New.restype = ctypes.py_object
py> g = (i for i in [1,2,3])
py> g2 = PyGen_New(g.gi_frame)
py> g2.gi_code is g.gi_code
True
py> g2.gi_frame is g.gi_frame
True
py> g.next()
1
py> g2.next()
2

g 和 g2 共享相同的执行框架,因此它们不是独立的。那里
在 Python 中创建新框架并不简单:

py> type(g.gi_frame)()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot create 'frame' instances

可以尝试使用 PyFrame_New——但这对我来说太神奇了......

关于Python:copy.deepcopy 产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1401610/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com