更多优质内容请关注「AI 应用前沿」

拥抱人工智能,并没有想象的那么难,每天懂一点就已经上路了[给力]

Value的比较符号用双等号“==”,上例中比较l1和l2的Value要写成“l1 == l2”,明显两者的Value是相等的。按照约定俗成的习惯,我们把Value值相等的两个对象称为“相等”,而把Id值相等的两个对象称为“相同”。

所以,准确地说,上例的l1与l2相等,但是他们不相同,l1==l2,但l1 is not l2。

特权种族:共用内存的对象

每个对象被创建出来的时候,就会确定其Id标识,也就是给它分配内存地址。通常来说,新对象的内存地址也是新的,会从未分配的可用地址中取。

但是,为了提高内存利用效率,对于一些常用的对象,如一些数值较小的数字对象、布尔值对象、None对象、较短的字符串对象等等,python采取共用对象内存的分配策略。

# 新分配内存地址的例子ww=[1,2]ee=[1,2]id(ww)==id(ee) >>>Falsea=2018b=2018id(a)==id(b) >>>False# 共用内存地址的例子a=100b=100id(a)==id(b) >>>Truef1=Truef2=Trueid(f1)==id(f2) >>>Truen1=Nonen2=Noneid(n1)==id(n2) >>>Trues="python_cat"t="python_cat"id(s)==id(t) >>>True

这就意味着,python中出现了“特权种族”,运行环境早早就为它们分配好了内存地址,一旦要创建新的对象时,先去特权种族中查找,有Type和Value相等的对象,则新对象不分配新的内存空间,而是指向已有对象。

“特权种族”的存在,使得我们不需要频繁创建这些对象,既能提高已分配内存的使用率,又减少了创建对象、分配新内存的损耗。

对于共用内存地址的数字对象的取值范围,根据这篇文章《Python中神秘的-5到256》(链接见文末)对python源码的分析,文中有如下结论:

Python中,对于整数对象,如果其值处于[-5,256]的闭区间内,则值相同的对象是同一个对象。

对于共用内存地址的字符串对象的取值范围,学习了几篇对python源码分析的文章后(链接见文末),猫猫总结出大致有以下结论:

Python中,字符串使用Intern机制实现内存地址共用,长度不超过20,且仅包括下划线、数字、字母的字符串才会被intern;涉及字符串拼接时,编译期优化结果会与运行期计算结果不同。

# 编译对字符串拼接的影响s1 = "hell"s2 = "hello""hell" + "o" is s2 >>>Trues1 + "o" is s2 >>>False# "hell" + "o"在编译时变成了"hello",# 而s1+"o"因为s1是一个变量,在运行时才拼接,所以没有被intern

Python 循环拼接字符串_详解Python拼接字符串的七种方式相关推荐

  1. python 条件语句实例_详解python 条件语句和while循环的实例代码

    详解python 条件语句和while循环的实例代码,逻辑,布尔,值为,结束,语句 详解python 条件语句和while循环的实例代码 易采站长站,站长之家为您整理了详解python 条件语句和wh ...

  2. python变量定义大全_详解python变量与数据类型

    这篇文章我们学习 Python 变量与数据类型 变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问.在 Python 中 变量命名规定,必须是大小写英文,数字 ...

  3. python提取邮件附件_详解python实现读取邮件数据并下载附件的实例

    详解python实现读取邮件数据并下载附件的实例 实现结果图: 实现代码: #!/usr/bin/python2.7 # _*_ coding: utf-8 _*_ """ ...

  4. python停止线程池_详解python中Threadpool线程池任务终止示例代码

    需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...

  5. python装饰器由浅入深_详解Python装饰器由浅入深

    装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们 ...

  6. python实现日历功能_详解Python日历模块的使用

    calendar模块的函数都是日历相关的,提供了对日期的一些操作方法,和生成日历的方法. calendar模块中提供了三大类: 一.calendar.Calendar(firstweekday=0) ...

  7. pillow属于python标准库吗_详解Python图像处理库Pillow常用使用方法

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:PIL. PIL ...

  8. python中byte类型_详解python string类型 bytes类型 bytearray类型

    搜索热词 一.python3对文本和二进制数据做了区分.文本是Unicode编码,str类型,用于显示.二进制类型是bytes类型,用于存储和传输.bytes是byte的序列,而str是unicode ...

  9. python模块搜索原则_详解python模块路径查找规则及定义

    在python中创建一个模块非常简单,只需要在当前目录下创建一个 .py文件即可,系统自动将其解析成模块,文件名就是模块名.很多我们源码时代的同学都认为在查找模块时优先使用当前目录下的自定义模块.其实 ...

  10. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

最新文章

  1. OpenCV 【十八】图像平滑处理/腐蚀与膨胀(Eroding and Dilating)/开闭运算,形态梯度,顶帽,黑帽运算
  2. 区块链行业报告|从交易流程到Token经济的全方位解析
  3. java基础练习题目
  4. refreshtoken用mysql_「SpringCloud」 Spring Security OAuth2 Mysql管理在线Token
  5. pom.xml配置文件配置jar(不用记,快速配置)
  6. 该文件可能是只读的 或者您要访问的位置_喔噢小贴士:如何保护PPT不被更改,将其设为只读...
  7. MySQL 表和列的注释
  8. fedora下安装python
  9. 已经被研发出来的AI芯片有哪些?
  10. android短信验证码自动填写
  11. 水哥王昱珩直播解锁华为Mate 20黑科技,超微距效果实力非凡
  12. mysql发音_mysql应该怎么念?
  13. 2020移动apn接入点哪个快_移动水上乐园里的充气水池和支架水池,哪个回本快?...
  14. HTTP之proxy
  15. maven打包报错:Error creating shaded jar: invalid LOC header (bad signature)
  16. Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案)
  17. css中的before与after
  18. 看见、读懂、放大,这个运营套路有点意思
  19. Can‘t load /home/Iot/.rnd into RNG
  20. 878. 第 N 个神奇数字 数学+二分

热门文章

  1. matlab 2016b更改工作路径
  2. 一劳永逸-解决人类未来长期-暴露在病毒的方案-致所有中国的科技公司一封信
  3. Django 分页器模板
  4. NodeMCU快速上云集锦
  5. 1503 - A PRIMARY KEY must include all columns in the table's partitioning function
  6. 【转】PHP date(Y-m-d H:i:s);获取当前时间 差8小时解决办法
  7. 《可扩展的艺术》内容回顾与作者采访
  8. 简单几何(推公式) UVA 11646 Athletics Track
  9. 【cocos2d-x】Lua中的table函数库
  10. 《IT咨询指南》读书笔记一开卷 前言