zoukankan      html  css  js  c++  java
  • python 小整数池 和intern 【整理】

    小整数对象池 (在python内置了)
    整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。
    Python对小整数的定义是[-5,257]这些整数对象是提前建立好的,不会被垃圾回收。在一个Python的程序中,所有位于这个范围内的整数使用的都是同一个对象。
    同理,单个字母也是这样的。
    但是当定义2个相同的字符串时,引用计数为0,触发垃圾回收

    intern机制
    a1="helloworld"
    a2="helloworld"
    a3="helloworld"
    a4="helloworld"
    a5="helloworld"
    a6="helloworld"
    a7="helloworld"
    a8="helloworld"
    a9="helloworld"

    python会不会创建9个对象呢?在内存中会不会开辟9个"helloworld"的内存空间呢?想一下,如果是这样的话,我们写10000个对象,
    那他岂不是开辟了10000个helloworld所占的内存空间了呢?如果真这样,内存不就爆了吗?所以python中有这样一个机制-----intern
    机制,让他只占用一个"helloworld"所占的内存空间。靠引用计数去维护何时释放。
    a="hello"
    b="hello"

    id(a)
    4555765776
    id(b)
    4555765776

    a = "hello world"
    b = "hello world"
    id(a)
    4553372528
    id(b)
    4555786352

    python默认只会对由字符"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"构成字符串进行intern。
    如果是

    a = '!@#'
    b= '!@#'
    id(a)
    45517120

    id(b)
    45517216

  • 相关阅读:
    linux:安装php7.x
    linux:搭建 WordPress 个人站点
    linux:lnmp环境
    knn初了解
    Pycharm:鼠标滚动控制字体大小
    数据集的获取
    弄懂Java的自增变量
    面试中的volatile关键字
    Java的类锁、对象锁和方法锁
    Error creating bean with name 'entityManagerFactory' defined in class path resource解决方案
  • 原文地址:https://www.cnblogs.com/jijizhazha/p/7699335.html
Copyright © 2011-2022 走看看