Python 字符串 Intern 机制


s3 = "hello!"
s4 = "hello!"
s3 is s4
False
id(s3)
80325968L
id(s4)
80326048L

s3 和 s4 虽然值是一样的,但确确实实是两个不同的字符串对象,Python 会为它们俩各自分配一段内存空间,假设程序中存在大量值相同的字符串,系统就不得不为每个字符串重复地分配内存空间,显然对系统来说是一种无谓的资源浪费。为了解决这种问题,Python 引入了 intern 机制。

s3 = intern('hello!')
s4 = intern('hello!')
s3 is s4
True
id(s3)
80325968L
id(s4)
80325968L

intern 是 Python 中的一个内建函数,该函数的作用就是对字符串进行 intern 机制处理,处理后返回字符串对象。我们发现但凡是值相同的字符串经过 intern 机制处理之后,返回的都是同一个字符串对象,这种方式在处理大数据的时候无疑能节省更多的内存空间,系统无需为相同的字符串重复分配内存,对于值相同的字符串共用一个对象即可。
在主流面向对象的编程语言中intern 机制对于处理字符串已经成为一种标配,通过 intern 机制可以提高字符串的处理效率,当然,解释器内部很对 intern 机制的使用策略是有考究的,有些场景会自动使用 intern,有些地方需要通过手动方式才能启动。

s1 = "hello"
s2 = "hello"
s1 is s2
True
id(s1)
72320704L
id(s2)
72320704L
分享:

评论