gpt4 book ai didi

python - 实习字符串的缺点?

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:01 25 4
gpt4 key购买 nike

考虑:

a = str(123456789)
b = str(123456789)
a is b # False

后一行计算为 False 因为 ab 不是同一个对象,即使它们可能是(因为字符串是不可变的) ).因此,如果我有很多相同字符串的“副本”,我可能会使用比我需要的更多的内存。这就是 intern (Py2) 和 sys.intern (Py3) 存在的原因!

a = intern(str(123456789))
b = intern(str(123456789)) # Call to "intern" technically pointless
a is b # True

从内存的角度来看,使用 intern 有什么缺点吗? (因此超出了调用函数的微小时间成本。)我从文档(例如 https://docs.python.org/2/library/functions.html#intern )中了解到,只要我保持对它的引用有效,字符串只会保留在实习生表中,所以在只有字符串的一个副本,它应该使用与直接分配给字符串相同的内存量,如果我有多个副本,那么显然我实习时内存使用率会更低。

最佳答案

可能有两个缺点:

  • 使用 sys.intern() 调用的 CPU 成本。调用函数需要将当前帧压入堆栈并在函数返回时再次弹出。如果您对很多 字符串执行此操作,成本会增加。这是您需要考虑的 CPU 周期与内存的权衡。

  • 如果您的字符串主要是单独使用,您最终可能会使用更多 内存。 Interning 还在哈希表中查找字符串对象,这必然需要分配比存储的字符串数量更多的内存槽。使用具有 N + 开销百分比槽的哈希表可能超过 N 个字符串所需的内存,每个字符串都很少使用,因此不会重复。

也就是说,我们已经成功地使用了实习,并在数 GB 的内存缓存中产生了显着效果,其中字符串必然出现在树结构中的多个位置。

关于python - 实习字符串的缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875982/

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