P
Paul Rubin
class x: pass
z = x()
z.a = 'a'
d = {'a': z}
for i in range(5):
print id(d['a'])
prints the same id 5 times as you'd expect.
d = shelve('filename')
d['a'] = z
for i in range(5):
print id(d['a'])
prints five different id's. So, for example,
y = d['a']
y.x = 'x'
fails to update the shelve.
The reason is sort of understandable but I hadn't guessed it ahead of
time (I'd actually forgotten that d wasn't a normal dict, which you're
supposed to be able to do if abstraction works properly), and it
caused a bug in my program that took a little while to figure out.
I wonder if some fix is possible.
z = x()
z.a = 'a'
d = {'a': z}
for i in range(5):
print id(d['a'])
prints the same id 5 times as you'd expect.
d = shelve('filename')
d['a'] = z
for i in range(5):
print id(d['a'])
prints five different id's. So, for example,
y = d['a']
y.x = 'x'
fails to update the shelve.
The reason is sort of understandable but I hadn't guessed it ahead of
time (I'd actually forgotten that d wasn't a normal dict, which you're
supposed to be able to do if abstraction works properly), and it
caused a bug in my program that took a little while to figure out.
I wonder if some fix is possible.