== 与 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。
随机推荐
- 打patch p0 p1区别
如何使用patch 对于一个patch文件,有两种常用使用方法: 1.代码:cat new-patch | patch -p0 2.代码:patch -p0 < new-patch patc ...
- 《Ruby语言入门教程v1.0》学习笔记-03
10.09 第七章 7.1 模块 Ruby标准包里的 Math 模块提供了许多方法,比如:求平方根 sqrt ,使用的时候要这么写:模块名.方法名(参数).如:Math.sqrt( a*5+b ) M ...
- JVM探索(一)
JVM测试的样例代码: import java.lang.management.ManagementFactory; /** * @author zhailzh * * @Date 2015年 ...
- Python学习 1 一 Python2.75的安装及环境配置教程
Python2.75的安装及环境配置教程 Python的语法简洁,功能强大,有大量的第三方开发包(模块),非常适合初学者上手.同时Python不像java一样对内存要求非常高,适合做一些经常性的任务方 ...
- windows 编程—— 常用函数 与 操作
目录: MessageBox() 和 PlaySound() 获得窗口 或屏幕大小 获得字体大小 输出文字 屏蔽和显示控制台窗口 1. MessageBox() 和 PlaySound() Messa ...
- NGUI 动态字体边缘模糊,毛边的问题解决办法
NGUI支持生成动态字体,将ttf格式的字体文件拖入工程,用NGUIFontMaker制作即可,但是制作完之后会发现字体有毛边,边缘模糊. 这时选中你生成的字体预设,在该预设的UIFont脚本上更改P ...
- Android ProgressBar SeekBar
1.ProgressBar 进度条 当水平进度条完成后,隐藏该进度条,并显示一张图片 常用属性: 1. android:max 设置进度条的最大值 2. android:progress 用于指定进度 ...
- 与Scheme共舞
发表在<程序猿>2007年7月刊上.不log上写帖子不用考虑版面限制,所以这里的帖子比发表的啰嗦点.赵健平编辑,Jacky,和刘未鹏都给了我非常多帮助,在这里一并谢了.免费的Scheme实 ...
- Excel 国家甘特图(多图)
前言 者必画的图.我找了非常久也没找到一个专门画甘特图比較好的软件.经过研究最终用Excel画出了甘特图.网上这个资料但是没有的哟! 效果 watermark/2/text/aHR0cDovL2Jsb ...
- .Net程序猿玩转Android开发---(3)登陆页面布局
这一节我们来看看登陆页面如何布局.对于刚接触到Android开发的童鞋来说.Android的布局感觉比較棘手.须要结合各种属性进行设置,接下来我们由点入面来 了解安卓中页面如何布局,登陆页面非常eas ...