- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用搁置看到了这种行为:
import shelve
my_shelve = shelve.open('/tmp/shelve', writeback=True)
my_shelve['a'] = {'foo': 'bar'}
my_shelve['b'] = my_shelve['a']
id(my_shelve['a']) # 140421814419392
id(my_shelve['b']) # 140421814419392
my_shelve['a']['foo'] = 'Hello'
my_shelve['a']['foo'] # 'Hello'
my_shelve['b']['foo'] # 'Hello'
my_shelve.close()
my_shelve = shelve.open('/tmp/shelve', writeback=True)
id(my_shelve['a']) # 140421774309128
id(my_shelve['b']) # 140421774307832 -> This is weird.
my_shelve['a']['foo'] # 'Hello'
my_shelve['b']['foo'] # 'Hello'
my_shelve['a']['foo'] = 'foo'
my_shelve['a']['foo'] # 'foo'
my_shelve['b']['foo'] # 'Hello'
my_shelve.close()
正如您所看到的,当搁架重新打开时,以前是同一对象的两个对象现在是两个不同的对象。
我使用的是Python 3.7.0
最佳答案
shelve
将对象的 pickle 表示存储到架子文件中。当您存储与 my_shelf['a']
相同的对象时和my_shelf['b']
, shelve
为 'a'
写入对象的 pickle键,以及 'b'
对象的另一个 pickle key 。需要注意的一个关键事项是它单独 pickle 所有值。
当您重新打开书架时,shelve
使用 pickle 的表示来重建对象。它使用 pickle 'a'
重建您存储的字典,它使用 'b'
的 pickle重新构建您存储的字典再次。
pickles 不会相互交互,并且在 unpickled 时没有任何方式返回相同的对象。磁盘上的表示没有表明 my_shelf['a']
和my_shelf['b']
永远都是同一个物体;使用单独的物体制作的架子 my_shelf['a']
和my_shelf['b']
可能看起来相同。
如果您想保留这些对象相同的事实,则不应将它们存储在架子的单独键中。考虑使用 'a'
对单个字典进行 pickle 和取消 pickle 和'b'
键而不是使用 shelve
.
关于 python 搁置: same objects become different objects after reopening shelve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53163993/
嗨,这是我的搁架条目结构 { 'Birds' : { 'BlueOnes': ["detailsAboutBlueBird"], 'RedOnes' : ["d
是否可以对已打开的文件使用搁置?我想执行如下操作,但 shelve.open 不接受文件描述符。 f = open('file.shelve') s = shelve.open(f) 最佳答案 搁
搁置 documentation说: The choice of which database package will be used (such as dbm, gdbm or bsddb) de
我正在使用 Pycharm。首先,无论何时在 Pycharm 中导入任何模块。完整的导入行淡出。但如果 import shelve 不会淡出。此外,当我运行该文件时,出现以下错误: Traceback
我已搁置文件a.txt, b.txt, c.txt . 现在我想对 a.txt 和 b.txt 进行一些更改,并与新文件 d.txt 一起搁置。 所以, 第一步,使用 p4 unshelve -s
我有一个包含大量文件的更改列表。我必须处理其他请求,所以我使用 p4 shelve -c 899 搁置了更改.但是当我打开 p4 时,文件仍然显示在工作区中。 由于数量很大,我想一次还原所有文件。我试
我在 Python 中使用 Shelve 时遇到问题: In [391]: x Out[391]: {'broken': {'position': 25, 'page': 1, 'letter': '
我正在尝试将一个字典的字典添加到搁置文件中: >>> d = shelve.open('index.shelve') >>> d >>> print(list(d.keys())) [] >>> d
我创建了一个名为 foo_module.py 的文件,其中包含以下代码: import shelve, whichdb, os from foo_package.g import g g.shelf
我是 Team Foundation Server 的新手,所以我想知道“搁置待处理更改”在 Team Foundation Server 中的作用是什么。我正在 Codeplex 上使用项目的 TF
我正在从 .nib 文件创建 .strings。也就是说,我正在将 .nib 文件更改为 Xcode 9.2 上的本地化字符串文件。 现在我得到了 .strings 文件,其中包含所有需要的字符串和根
我使用 Git 进行版本控制,Android Studio 与它很好地集成,非常喜欢! 但现在,我做了“VCS->搁置更改...” 然后 POOF,他们不见了。我以为我需要使用存储,但后来我想让我们看
我使用搁置看到了这种行为: import shelve my_shelve = shelve.open('/tmp/shelve', writeback=True) my_shelve['a'] =
我正在使用 shelve 来存储一些数据。 Traceback (most recent call last): File "rogue.py", line 312, in curs
我是一名优秀的程序员,十分优秀!