`

id()使用,小整数及字符串缓存

 
阅读更多

整数对象和字符串对象是不可变对象,所以Python 会很高效的缓存它们。这会造成我们认为Python 应该
创建新对象时,它却没有创建新对象的假象。看下面的例子:
>>> a = 1
>>> id(a)
8402824
>>> b = 1
>>> id(b)
8402824
>>>
>>> c = 1.0
>>> id(c)
8651220
>>> d = 1.0
>>> id(d)
8651204
在上面的例子中,a 和 b 指向了相同的整数对象,但是 c 和 d 并没有指向相同的浮点数
对象。如果我们是纯粹主义者,我们会希望 a 与 b 能和 c 与 d 一样,因为我们本意就是为
了创建两个整数对象,而不是像 b = a 这样的结果。

Python 仅缓存简单整数,因为它认为在Python 应用程序中这些小整数会经常被用到。当
我们在写作本书的时候,Python 缓存的整数范围是(-1, 100),不过这个范围是会改变的,所
以请不要在你的应用程序使用这个特性。
Python 2.3 中决定,在预定义缓存字符串表之外的字符串,如果不再有任何引用指向它,
那这个字符串将不会被缓存。也就是说, 被缓存的字符串将不会象以前那样永生不灭,对象回
收器一样可以回收不再被使用的字符串。从Python 1.5 起提供的用于缓存字符的内建函数
intern() 也已经不再推荐使用, 即将被废弃。

分享到:
评论

相关推荐

    java 获取分布式唯一ID.雪花ID

    同时,可以使用`UUID`生成字符串唯一ID,但不适用于分布式环境。而`IdUtils`中的方法可能是对这些ID生成方式的封装,提供更简单的调用接口。在具体项目中,应根据需求选择合适的ID生成策略,并考虑性能优化。

    python初学者笔记

    * 字符串:字符串是不可变的,Python 不支持单字符类型,单字符也是作为一个字符串使用的。Python3 直接支持 Unicode,可以表示世界上任何书面语言的字符。 运算符 Python 中有多种运算符,包括算术运算符、比较...

    Linux C api参考手册

    * strtoul(): 将字符串转换为无符号长整数 * toascii(): 将字符转换为 ASCII 码 * tolower(): 将字符转换为小写字母 * toupper(): 将字符转换为大写字母 内存控制篇 * calloc(): 分配内存块 * free(): 释放内存块 ...

    UE基础面试,比较难回答的问题\字符串\代理\容器等

    - **FName**:内部使用整数ID来表示。 **7.3 字符串转换** UE支持不同字符集之间的转换,如`FString::FromUTF8()`用于从UTF-8转换到UE内部格式。 #### 八、代理模式应用 **8.1 代理模式** 代理模式在UE中常用于...

    官方Java端口的Sqids生成短唯一的id从数字.zip

    Sqids使用特定的编码算法将这些组成部分压缩为一个较短的字符串。这可能包括Base32、Base64等编码方式,它们可以将二进制数据转换为可打印的字符,同时尽可能减少字符长度。 6. **Java实现** 在Java端口的Sqids中...

    android string转换为int

    两者的区别在于 `Integer.valueOf()` 可以用于缓存小范围(-128 到 127)内的整数值,提高性能。 ```java String str = "456"; int num = Integer.valueOf(str); ``` 三、`TextUtils.parseInt()` 如果你在使用...

    百度校园招聘历年笔试题.docx

    这道题要求编写一个程序,根据输入的整数N和数据文件A.txt,按照文件中各字符串的出现概率随机输出N条记录。首先,你需要读取文件,解析其中的字符串及其对应的概率。然后,基于这些概率构建一个概率分布,并实现一...

    delphi7的IdTCPClient和IdTCPServer的write用法

    2. **接收字符串内容**:服务器端根据接收到的长度`len`使用`ReadStream`方法读取相应长度的字符串`str`,并将其添加到`memo1`控件中显示出来。 #### 三、详细解析 **1. `IdTCPClient`和`IdTCPServer`组件** - *...

    原生微信小程序 总结及相关问题

    微信小程序的计算总额可以通过使用parseInt()函数来实现,该函数可以将字符串转换为整数。 reverse()方法 微信小程序的reverse()方法可以用来颠倒数组中元素的顺序。 点击图像预览 微信小程序的点击图像预览可以...

    PHP高效编程53个方法[文].pdf

    1. 使用单引号字符串:在创建字符串时,使用单引号(')而不是双引号(")可以提高性能。因为PHP在双引号中会解析变量,而单引号则不会。 2. 静态方法:如果可能,将类的方法声明为`static`,这样执行速度可以提升...

    Python经典题目100道题.pdf

    - 使用字符串的 join() 方法和 ASCII 字母生成:`''.join(chr(i) for i in range(65, 91)) + ''.join(chr(i) for i in range(97, 123))` 5. **字符串居中** - 使用字符串的 center() 方法:`text.center(width)` ...

    android由图片名称获取图片的ID.rar

    在Android应用中,图片、字符串、布局等资源都存储在res目录下,按类型(如drawable、values等)进行分类,并且每个资源都有一个唯一的ID。这些ID是由编译器在构建过程中自动分配的,通常是一个整数值,例如@...

    数据库课程设计-在线考试系统.doc

    - s_num:学生编号,非空的字符串。 - s_name:学生姓名,非空的字符串。 - s_major:学生专业,非空的字符串。 - s_class:班级编号,整数。 - date:创建或更新日期。 2. **课程表(subj)**: - sj_id:...

    MySQL数据库大表优化方案.docx

    优先使用枚举或整数代替字符串;尽量使用TIMESTAMP而非DATETIME;限制字段数量在20以内;避免NULL字段,以节省索引空间;存储IP时使用整型。 - **索引设计**:创建有针对性的索引,避免过多索引;避免在WHERE子句中...

    Algorithm-numtoa.zip

    在实际应用中,"numtoa"算法可以广泛应用于各种场景,如日志记录(将数字ID转换为字符串记录),数据序列化(将数值型数据转换为文本格式存储),或者网络通信(数字转换为便于传输的字符串)。特别是在资源有限的...

    一个下载歌曲播放 网络缓存 数据库录入 coreData 运用三方库的综合例子

    - **属性(Attribute)**: 定义实体的字段,如字符串、日期、整数等。 - **关系(Relationship)**: 描述实体之间的关联,如歌曲可能有一对多的关系到艺术家实体。 - **.managedObjectContext**: 用于操作数据库,...

    redis使用场景及数据结构.docx

    - 当字符串能够转换为数字时,会使用int类型存储以节省内存。 2. **List (列表)**: - 在Redis 3.2及以上版本中,采用基于ziplist的双向链表quicklist实现。 - **Ziplist**:一种压缩数据结构,连续内存存储,...

    play文档-PlayCheatSheet.pdf

    - `public static void link(int i, String n)`:此方法通过路径参数`i`和`n`接收整数和字符串类型的数据。 - `public static void link(Integer i, String n)`:与前一个方法类似,但此处的整数参数可以为`null`...

Global site tag (gtag.js) - Google Analytics