gpt4 book ai didi

Python pickle 不适用于 UserLists/UserDicts

转载 作者:行者123 更新时间:2023-11-28 22:51:34 25 4
gpt4 key购买 nike

<分区>

UserDicts 和 UserLists 似乎与 pickle 模块一起工作不稳定。我该如何修复这个错误:

test_pickle.py

import pickle

class UserList(list):
pass

class UserDict(dict):
pass

u = UserList([])
for i in range(10):
d = UserDict()
d.u = u
u.append(d)

pickle.dump(u, open("ttt.pcl", 'wb'))

$ python test_pickle.py

  ... <~300 traceback lines>
File "/usr/lib/python2.7/pickle.py", line 663, in _batch_setitems
save(v)
File "/usr/lib/python2.7/pickle.py", line 331, in save
self.save_reduce(obj=obj, *rv)
File "/usr/lib/python2.7/pickle.py", line 405, in save_reduce
self.memoize(obj)
File "/usr/lib/python2.7/pickle.py", line 244, in memoize
assert id(obj) not in self.memo
AssertionError

现在,如果我增加 UserList 中的元素数量,它会变得“更好”:

import pickle

class UserList(list):
pass

class UserDict(dict):
pass

u = UserList([])
for i in range(100):
d = UserDict()
d.u = u
u.append(d)

pickle.dump(u, open("ttt.pcl", 'wb'))

$python test_pickle.py

... <more lines than my terminal can handle>
File "/usr/lib/python2.7/pickle.py", line 649, in save_dict
self._batch_setitems(obj.iteritems())
File "/usr/lib/python2.7/pickle.py", line 663, in _batch_setitems
save(v)
File "/usr/lib/python2.7/pickle.py", line 306, in save
rv = reduce(self.proto)
File "/usr/lib/python2.7/copy_reg.py", line 71, in _reduce_ex
state = base(self)
RuntimeError: maximum recursion depth exceeded while calling a Python object

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