对于这个例子,我有一本字典,当我打电话时,会显示“Ember Attack”。
#import shelve
class Pokemon():
"""Each pokemon's attributes"""
def __init__(self):
self.id=[]
self.var1=[]
self.var2=[]
self.var3=[]
self.var4=[]
self.var5=[]
def __str__(self):
showList=['id','var1', 'var2', 'var3', 'var4', 'var5']
#dict1=shelve.open("shelve.dat")
dict1={}
dict1["Charmander"]=Pokemon()
dict1["Charmander"].var1="Ember Attack"
#dict1.sync()
print dict1["Charmander"].var1
#dict1.close()
然而,当我开始使用书架而不是字典时,当我调用var1时,我得到一个空白。
import shelve
class Pokemon():
"""Each patient's attributes"""
def __init__(self):
self.id=[]
self.var1=[]
self.var2=[]
self.var3=[]
self.var4=[]
self.var5=[]
def __str__(self):
showList=['id','var1', 'var2', 'var3', 'var4', 'var5']
dict1=shelve.open("shelve.dat")
#dict1={}
dict1["Charmander"]=Pokemon()
dict1["Charmander"].var1="Ember Attack"
dict1.sync()
print dict1["Charmander"].var1
dict1.close()
唯一的区别是我把dict1变成了一个搁置字典,而不是一个普通的字典。它可能与内存范围有关。无论如何,有人可以帮我修改我的代码,以便它可以与货架一起使用吗?谢谢!
答案 0 :(得分:1)
dict1=shelve.open("shelve.dat", writeback=True)
您还可以指定应该提高性能的协议
dict1=shelve.open("shelve.dat", protocol=2, writeback=True)
由于Python语义,一个架子 无法知道何时变异 持久字典条目是 改性。默认情况下修改对象 仅在分配给时写入 货架(见例)。如果是可选的 writeback参数设置为True, 访问的所有条目也都被缓存 在内存中,并写回同步() 并关闭();这可以使它更方便 改变中的可变条目 持久字典,但是,如果很多 条目被访问,它可以消耗 缓存的大量内存, 它可以进行近距离操作 因为所有访问的条目都很慢 写回来(没有办法 确定哪些访问的条目 可变的,实际上也不是 突变)。