== 与 is
Python中的对象包含三要素:id、type、value
id:用来唯一标识一个对象;
type:标识对象的类型;
value是对象的值。
==是判断对象的值是否相等,也就是value,is是判断对象是否就是本身,也就是id。
a = 'abc' b = 'abc' print a==b,a is b #打印结果:True,True
上面的a和b指向的应该不是同一个对象,为什么a is b打印的True呢!经过搜索,原来“在Python内部暂时储存并重复使用短字符串作为最佳化,实际上内存里只有一个字符串供a,b两个共享引用”,所以a is b打印的是True,下面就验证一下:
c = 'a'*255 d = 'a'*255 print a == b, a is b #打印结果:True, False
上面c和d都是等于255个a的长字符串,都是指向不同的对象,打印a is b为False,也就验证了“在Python内部暂时储存并重复使用短字符串作为最佳化,实际上内存里只有一个字符串供a,b两个共享引用”这句话。接着,可以看一下a,b,c,d的id:
print id(a), id(b) print id(c), id(d) #打印结果:34220632, 34220632 # 33885504, 33885224
可以看到,a和b指向的是不同对象,但由于Python内部暂时存储并重复使用短字符串为最佳化,所以id是一样的,也就是a is b为True,而c和d指向的对象为长字符串,所以id就符合c和d指向为不同对象,为False。
随机推荐
- Bloom Filter(布隆过滤器)
布隆过滤器用于测试某一元素是否存在于给定的集合中,是一种空间利用率很高的随机数据结构(probabilistic data structure),存在一定的误识别率(false positive),即 ...
- 编写高质量js代码
原文链接:http://code.tutsplus.com/tutorials/24-javascript-best-practices-for-beginners--net-5399 jquery代 ...
- [Java] 垃圾回收 ( Garbage Collection ) 的步骤演示
关于 JVM 垃圾回收机制的基础内容,可参考上一篇博客 垃圾回收机制 ( Garbage Collection ) 简介 上一篇博客,介绍了堆的内存被分为三个部分:年轻代.老年代.永生代.这篇博文将演 ...
- [Java] 类的初始化步骤
前言 类的初始化过程,可在多线程环境下进行的,为了简化,本文介绍的单线程情况下的类初始化步骤. 此外,继承情况下的顺序不是本文焦点,本文重点在于一个类的内部字段的初始化顺序.想了解继承情况下的初始化情 ...
- websocket nova vnc proxy
1. vnc proxy的实现原理 vnc 是nova提供的用来访问虚拟机的一项重要功能,用户可以通过websocket来访问,也可以通过java客户端来访问.通过websket访问虚拟机 的功能已经 ...
- iOS进阶读物
不知不觉作为 iOS 开发也有两年多的时间了,记得当初看到 OC 的语法时,愣是被吓了回去,隔了好久才重新耐下心去啃一啃.啃了一阵,觉得大概有了点概念,看到 Cocoa 那么多的 Class,又懵了, ...
- android:allowbackup="true"
<application android:allowBackup="false" android:label="@string/app_name"> ...
- POJ 2044 Weather Forecast
意甲冠军:有一2*2云,而一个4*4范围.在当天密布区必须有雨.有云4招式种类 .期间希望不要下雨,并且一个地方不能有连续7天没下雨. 思路:首先解决一个地方不能有连续7天没下雨的情况,要让地图上的全 ...
- ionic 字体的导入方法
更换字体 这是第一个图标(蜜蜂推荐)是撸主原来的图标 这是UI给的效果图的图标,显然默认的图标不符合要求 查找图标所在的样式,在tabs.html文件中 <ion-tabs class=&quo ...
- (转)html5 Placeholder属性兼容IE6、7方法
使低版本浏览器支持Placeholder有很多方法,都不是很完美,或多或少有点问题,且有些原生支持的浏览器在获得焦点时会清空Placeholder提示.发现zhihu的解决方法不错,特记录下 wind ...