Python中的驻留机制,你了解多少

驻留机制是 Python 针对字符串文字的优化技术。它不会保存同一字符串 Literals 的多个副本,而是保存它的单个副本。这有助于有效使用内存并加快查找和比较速度。让我们通过一些示例来了解它

import sys

s1 = 'Medium does not support basic HTML tables'
s2 = 'Medium does not support basic HTML tables'

print(s1 is s2) # false
print(id(s1))   # 139912277338320
print(id(s2))   # 140434884249808


s3 = sys.intern('Medium does not support basic HTML tables')
s4 = sys.intern('Medium does not support basic HTML tables')

print(s3 is s4) # true

sys.intern() 显式地暂存一个字符串。S3S4 使用 sys.intern 进行暂存,因此它们引用同一对象。当您处理大文本并需要节省内存时,这是一个很好的方法。

尝试了以下作来明确不让字符串 Literals 引用同一个对象,但它们总是这样做。因为 Python 在这些情况下会自动驻留字符串。

s1 = 'a really large text'
s2 = 'a really large text' + ''
s3 = s1[:]
s4 = str('a really large text')

它不会为长字符串( >800 chars)、动态创建的字符串、范围/时间相似性(就像这里的相同脚本一样)驻留。但是,字典中的字符串键也是同一个对象,这使得执行查找变得更加容易。

sample_dict = {
    'name' : 'Harshit',
    'gender': 'M'
}

another_dict = {
    'name' : 'Novak',
    'gender': 'M'
}

print(hex(id(another_dict.keys()))) # 0x7fb4bce718b0
print(hex(id(sample_dict.keys())))  # 0x7fb4bce718b0