python字符串驻留(intern)机制

枫铃3年前 (2021-09-30)Python281

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

驻留适用范围

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

实例1:

>>> str1='jinmo'
>>> str2='jinmo'
>>> str1 is str2
True
>>> id(str1)
1979078421896
>>> id(str2)
1979078421896

实例2:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> str3='jinmo wbw'
>>> str4='jinmo wbw'
>>> str3 is str4
False
>>> id(str3)
1979078402432
>>> id(str4)
1979078403832

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

驻留时机

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

实例3:

>>> str1='jin'+'mo'
>>> str1 is 'jinmo'
True
>>> str3='jin'
>>> str4=str3+'mo'
>>> str4 is 'jinmo' 
False

优缺点

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

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

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

    python标识符的不可变性导致了字符串的改动不是采用replace,而是重新创建对象。为了节省内存,涉及到字符串的改动时通常用join()而非+。因为+会多次创建对象,而join()只创建一次对象。
    驻留机制会提升一些时间和空间上的性能,但驻留对象也有所消耗。

注意事项

1、连接字符串

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

2、字符串驻留限制

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

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。