zoukankan      html  css  js  c++  java
  • Python学习系列之字符串的创建与驻留机制 (十七)

    字符串的驻留机制

    1.字符串

    • 在Python中字符串时基本数据类型,是一个不可变的字符序列

    2.什么叫字符串驻留机制?

    • 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把字符串的地址赋给新创建的变量

    举例:

    '''字符串的驻留机制'''
    a='Python'
    b="Python"
    c='''Python'''
    print(a,id(a))
    print(b,id(b))
    print(c,id(c))
    

      执行结果:

      说明:a,b,c三个对象的值和内存地址都相同,即当创建了a后,后面新建与a内容相同的变量时,则不会重新开辟新的内存空间,而是直接把已有的内存地址赋值给b和c变量,如下图

      3. 驻留机制的几种情况(交互模式)

      3.1 字符串的长度为0或1时

      

      3.2 符合标识符的字符串(含有数字、字母、下划线是符合标识符的字符串)

      说明:abc%不符合表示字符串,所有各有一个内存地址,abcx符合标识字符串,所以指向的是同一个内存地址

      3.3 字符串只在编译时进行驻留,而非运行时

       3.4 [-5,256]之间的整数数字

      

      3.5 sys中的intern方法强制2个字符串指向同一个对象

      说明:a,b因为不是符合标识符的字符串,所以它们的内存地址是不一样的,在使用intern()方法后,使得b的内存地址被强制改成和a的内存地址一样,所以进行is运算时值是True

      3.6 PyCharm对字符串进行了优化处理

      举例:(使用PyCharm运行如下代码)

    a='abc%'
    b='abc%'
    print(a is b)
    

      执行结果如下:

      说明:如果使用终端来执行的话,上面代码输出结果是False,但是使用PyCharm运行,则结果是True,表示PyCharm对代码有做一定的优化。

    4. 字符串驻留机制的优缺点

    • 当需要值相同的字符串时,可以直接从字符串里拿出来使用,避免频繁的创建和小会,提升效率和节约内存,因此拼接字符串和修改字符串时会比较影响性能的。
    • 在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符串中的长度,然后再拷贝,只new一次对象,效率要比“+”效率高
  • 相关阅读:
    大话设计模式--建造者模式 Builder -- C++实现实例
    HTTP状态码大全
    安装mongodb卡顿
    sublime_win配置
    sublime__最全面的 Sublime Text 使用指南
    sublime text 3搭建python 的ide
    spring boot与 spring.factories
    自定义xml spring bean
    统计分析: 跨库多表join
    java基础
  • 原文地址:https://www.cnblogs.com/wx170119/p/14437943.html
Copyright © 2011-2022 走看看