python字符串驻留机制_python字符串驻留(intern)机制

进阶之python字符串驻留(intern)机制

字符串驻留机制

对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。长字符串不遵守驻留机制。

驻留适用范围

由数字,字符和下划线(_)组成的python标识符以及整数[-5,256]。

实例1:

>>> str1='jiumo'

>>> str2='jiumo'

>>> str1 is str2

True

>>> id(str1)

1979078421896

>>> id(str2)

1979078421896

实例2:

>>> str3='jiumo wbw'

>>> str4='jiumo wbw'

>>> str3 is str4

False

>>> id(str3)

1979078402432

>>> id(str4)

1979078403832

可以看出非数字,字符和下划线(_)组成的字符串并不会触发驻留。python中用is可以比较两个字符串是否是同一个对象,也就是内存地址是否一样。

驻留时机

python中的驻留发生在compile_time,而不是run_time。

实例3:

>>> str1='jiu'+'mo'

>>> str1 is 'jiumo'

True

>>> str3='jiu'

>>> str4=str3+'mo'

>>> str4 is 'jiumo'

False

优缺点

字符串驻留机制的优缺点如下:

优点:能够提高一些字符串处理任务在时间和空间上的性能,

缺点:在创建或驻留字符串时的会花费更多的时间。

python标识符的不可变性导致了字符串的改动不是采用replace,而是重新创建对象。为了节省内存,涉及到字符串的改动时通常用join()而非+。因为+会多次创建对象,而join()只创建一次对象。

驻留机制会提升一些时间和空间上的性能,但驻留对象也有所消耗。

注意事项

1、连接字符串

由于字符串的改动不是inplace的操作,需要新建对象,因此不推荐使用+来拼接字符串,推荐使用join函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。

2、字符串驻留限制

仅包含下划线(_)、字母和数字的字符串会启用字符串驻留机制驻留机制。因为解释器仅对看起来像python标识符的字符串使用intern()方法,而python标识符正是由下划线、字母和数字组成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值