python - 带有大列表但不是小列表的递归泡菜
问题描述
我在尝试使用pickle
递归对象时遇到了一些问题。这是代码(下面的评论):
class A:
def __init__(self):
self.xs = []
class B:
def __init__(self):
self.xs = []
class X:
def __init__(self, a, b):
self.a
self.b
基本上,X
是类A
和B
. 在实践中,A
还有B
许多其他属性,但这些与这里无关。
如果我运行以下代码:
seq_a = [A() for _ in range(35000)]
seq_b = [B() for _ in range(300)]
for a in seq_a:
random.shuffle(seq_b)
for b in seq_b[:10]:
x = X(a, b)
a.xs.append(x)
b.xs.append(x)
然后尝试腌制seq_a
和seq_b
:
import io, pickle
class U:
def __init__(self, seq_a, seq_b):
self.seq_a = seq_a
self.seq_b = seq_b
pickle.dump(U(seq_a, seq_b), io.BytesIO())
我收到以下错误:
RecursionError:酸洗对象时超出最大递归深度
仅当我达到 and 的特定大小时才会发生该错误seq_a
,seq_b
例如,使用len(seq_a) == 1000
andlen(seq_b) == 100
时,代码可以正常工作。
我知道我可以提供__setstate__
and __getstate__
in U
, 但是A
,B
并且X
还有很多其他属性,我想避免在__getstate__
.
有没有办法让工作__setstate__
和__getstate__
(或其他解决方案)避免制作完整的副本A
,B
并且X
不临时修改它们?
解决方案
推荐阅读
- python - 在 jupyter notebook 中旋转 3D 绘图(以前的解决方案有问题)
- matlab - 在matlab中总结从散点图点到绘制线的垂直距离
- android - 运行 image_picker 时我的新 android 应用程序崩溃(基于颤振飞镖)
- variables - 使用动态创建的变量的值
- r - 如何让用户在闪亮的应用程序中上传多个文件?
- python - 生成源后使用graphviz更改特定节点的颜色
- azure-active-directory - Azure AD B2C 自定义声明
- video - 为什么ffmpeg会跳过一些图像?
- tensorflow - Tensorflow 模型未加载 gunicorn
- php - html按钮用sql脚本加载页面,然后返回当前页面