- 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/
我正在尝试使用 shelve使用 Python 3.3。建议使用 with shelve.open('spam.db') as db:... 语法来确保我们关闭“连接”。但是,当我尝试它时,出现以下错
shelve -- 用来持久化任意的Python对象 这几天接触了Python中的shelve这个module,感觉比pickle用起来更简单一些,它也是一个用来持久化Python对象的简单工具。
我正在用 Python 做一个项目,涉及大量与持久字典的交互工作。如果我不进行交互式开发,我可以使用 contextlib.looking 并相当有信心架子最终会被写入磁盘。但就目前情况而言,没有任何
是shelve只读模式坏了?文档说 flag 参数按照 dbm.open 中的说明工作。所以我想如果我在阅读模式下打开我不应该能够改变搁置对象。 页面here似乎还建议修改以只读方式打开的搁置对象应该
我将让以下终端 session 说明一切: >>> import shelve >>> s = shelve.open('TestShelve') >>> from collections impor
对于我的 python 应用程序,我正在考虑使用 shelve , 标准库的一部分。将有数百个进程,每个进程都向同一个搁置对象写入一些内容。写作将始终是将新的键值对添加到货架上。键是唯一的,因此没有两
我一直在使用 Shelve 作为文档存储。键是一个字符串化的整数,值只是字符串中的一些 html。不幸的是,我的脚本最终在数据库中放入了太多条目,以至于发生了错误(我手头没有确切的条目)。数据库的大小
在 TFS 中,我过去常常搁置我的更改作为备份,然后再尝试一些有风险的事情或试验一些事情。 如果一切顺利,我刚刚删除了搁置。否则,我取消搁置备份并继续。 我没有兴趣与任何人分享这些更改。 Git 中的
在 Perforce 中,什么是“搁置”文件?搁置在工作区中打开以供编辑的文件的目的是什么? 最佳答案 来自 Perforce documentation : Shelving is the proc
我有一个执行以下操作的 Python 应用程序: 由另一个进程每 2-3 分钟调用一次,以便使用 with shelve.open(shelvefilename, flag='c') 来存储对象。 被
我正在尝试卡住涉及使用搁置模块的应用程序。为了卡住它,我正在使用 GUI2EXE python 代码并利用 cx_freeze 部分(如果我删除搁置部分,一切都会很好)。 当我去运行我编译的应用程序时
嘿,大家好,我正在为学校做一个项目,我必须问 10 个数学问题,然后存储他们的分数名称和类(class),但唯一的问题是我似乎无法立即回到搁置的工作。下面是我试图开始工作的代码,任何帮助都会很好。 g
我有一个在 OS X 上用 python 2.7.2 开发的应用程序。我使用模块 shelve 并且在 mac 上似乎默认为 bsddb。该程序不会在装有 ActiveState python 2.7
我要 用户A 能够在 Perforce 中创建一个更改列表,然后将其搁置。那么我想要 用户B 能够取消搁置该更改列表并提交它。 这听起来很简单,但 Perforce 上架似乎并不像我期望的那样工作。当
我正在使用 PyMemoize 库来缓存协程。我装饰了协程,但是当 Python 调用它时,我得到: TypeError: can't pickle coroutine objects 发生这种情况是
我已经设置了一个模拟操作系统的 Python 脚本。它有一个命令提示符和一个虚拟文件系统。我正在使用 shelve 模块来模拟文件系统,它是多维的以支持目录层次结构。但是,我无法执行“cd”命令。我不
我正在尝试编写一个使用 shelve 的内存库持久存储返回值。如果我有内存函数调用其他内存函数,我想知道如何正确打开 shelf 文件。 import shelve import functools
我正在运行一个 Python 程序,该程序在 pickle 之上使用 shelve 模块。运行这个程序后,有时我得到一个输出文件 a.data 但有时我得到三个输出文件 a.data.bak, a.d
在 perforce 的源代码管理选项中,我看不到从特定变更列表触发构建的选项。可以这样做吗? 最佳答案 替代解决方案@catchingUp也有可能使用“构建审核”操作点触发构建(可以在构建历史记录正
我安装了 hg shelve(不是阁楼)扩展,并且我想发布补丁。在 git 中,它是 git stash drop 。如何使用搁置扩展来执行此操作? 最佳答案 来自Mercurial shelve d
我是一名优秀的程序员,十分优秀!