前言
在 Python 中经常通过内存池化技术来提高其性能,那么问题来了,在什么情况下会池化呢"htmlcode">
id(obj, /) Return the identity of an object. This is guaranteed to be unique among simultaneously existing objects. (CPython uses the object \'s memory address.)
通过上述说明,可以得知 id() 将会返回对像的唯一标识,在 CPython 中将会返回内存地址,也就是说如果两个对象 的 id 值一样,可以说着两个对象是相同的了.
例子
example 00
a = "" b = "" print(id(a),id(b)) print(a is b)
输出结果:
> a = ""
> b = ""
> print(id(a),id(b))
2114853370544 2114853370544
> print(a is b)
True
example 01
a = "a" b = "a" print(id(a),id(b)) print(a is b)
输出结果:
> a = "a"
> b = "a"
> print(id(a),id(b))
2114883022608 2114883022608
> print(a is b)
True
example 02
a = "magic_string" b = "magic" + "_" + "string" print(id(a),id(b)) print(a is b)
输出结果:
> a = "magic_string"
> b = "magic" + "_" + "string"
> print(id(a),id(b))
2114887161136 2114887161136
> print(a is b)
True
example 03
a = "magic!" b = "mgaic!" print(id(a),id(b)) print(a is b)
输出结果:
> a = "magic!"
> b = "mgaic!"
> print(id(a),id(b))
2114885855416 2114889455408
> print(a is b)
False
example 04
a,b = "magic!","magic!" print(id(a),id(b)) print(a is b)
输出结果:
> a,b = "magic!","magic!"
> print(id(a),id(b))
2114885691912 2114885691912
> print(a is b)
True
example 05
a = "!" b = "!" print(id(a),id(b)) print(a is b)
输出结果:
> a = "!"
> b = "!"
> print(id(a),id(b))
140564571922024 140564571922024
> print(a is b)
True
example 06
print(a*20 is 'aaaaaaaaaaaaaaaaaaaa') print(a*21 is 'aaaaaaaaaaaaaaaaaaaaa')
输出结果:
> print(a*20 is 'aaaaaaaaaaaaaaaaaaaa')
False
> print(a*21 is 'aaaaaaaaaaaaaaaaaaaaa')
False
总结
通过上述 7 个例子,我们不难对 python 的字符串池化有个大概的认识,我们这里做个简单的总结:
- 通过 example 00,01,05,我们可以得出对于长度为 0 或者 1 的字符串会被池化
- 通过 example 02,03,我们可以得出字符串中只包含字母数字以及下划线的字符串会被池化
- 通过 example 04, 我们可以得出当在同一行对不同变量,赋值如果相同的话,它们将会指向同一个对象,注意这里面的 “magic!” 并不符合池化的要求,这只是一种编译器的优化
- example 06 所出现的现象在 python 中有一个专业的术语,讲常量折叠(constant folding),顾名思义,在编译优化时,讲能够计算出的结果的变量直接替换为常量.但是这没有限制吗?显然不是的,在我们的例子中已经发现,当长度超过20的时候,折叠就会失效了,试想一下,如果没有限制的话,初始化的字符串过长,将会严重导致性能的下降以及内存的消耗
参考链接
The internals of Python string interning
exploring python code objects
Python string interning
Python String objects implementation
以上就是Python 字符串池化的前提的详细内容,更多关于Python 字符串池化的资料请关注其它相关文章!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- Elgar-Motdamour-UlfWallin,RolandPontinen(2024)[24bit-96kHz]FLAC
- 苏永康《 笑下去》 新曲+精选[WAV+CUE][1G]
- 周传雄《发觉》[WAV+CUE][1.1G]
- 证声音乐图书馆《真夏派对 x 浩室》[320K/MP3][67.19MB]
- 张镐哲.1994-无助【波丽佳音】【WAV+CUE】
- Relic.2024-浮在虛无的诗意【SEEAHOLE】【FLAC分轨】
- 群星.2001-台语(原主唱)排行总冠军黄金典藏版6CD【柯达唱片】【WAV+CUE】
- 证声音乐图书馆《真夏派对 x 浩室》[FLAC/分轨][379.1MB]
- 徐良《东西世界》[WAV+CUE][1.1G]
- 证声音乐图书馆《真夏派对 x 迪斯可》[320K/MP3][67.9MB]
- TheDutchSwingCollegeBand-JubileeConcert(LiveRemastered2024)(1980)[24Bit-96kHz]FLAC
- 永恒英文金曲精选6《TheBestOfEverlastingFavouritesVol.6》[WAV+CUE]
- ABC唱片-鲍比达·新民乐《满江红》[APE+CUE]
- 许嵩.2014-不如吃茶去【海蝶】【WAV+CUE】
- 周笔畅.2024-HAVE.A.GOOD.NIGHT【SN.Music】【FLAC分轨】