Python学习笔记(8)-变量、地址、id、is与==
2017-04-09 18:11
375 查看
一、简介
本篇主要介绍Python作为一种动态语言的动态特点、Python的变量保存、以及id()函数和is()函数和==操作符之间爱恨纠缠的关系。
二、动态语言
首先所谓的动态语言、静态语言,其实就是针对变量的类型而言的。
静态语言比较常见的如Java和C#,你在定义变量的时候就得说好了它是啥类型如:
动态语言就不必,为啥不必呢,因为无所谓啊。动态语言的变量可以随时改变类型哦,比如:
OK,那么好像看起来,动态语言更灵活,更牛逼一点。是的,是更灵活,但是既然要到运行的时候才能确定怎么存储、使用这些变量,肯定会在某些方面(比如性能)上有弱点吧,金无赤足,各有所长嘛。
三、Python变量的保存
那么看似牛X的Python变量是如何可以切换类型的呢,其实真正牛的不是Python变量,而是Python语言的解释执行器。
举个例子如下,解释器可以这么运作。首先在内存中地址为XXXX的地方存了一个变量1,然后运行到a=1时,发现整数1要赋值给变量a,所以解释器就知道了啊哈变量a是整型,然后a其实保存的是地址XXXX。
然后运行到a=0.1,解释执行器在内存中地址为YYYY的地方存了0.1,然后知道了啊哈a是浮点类型,然后a保存的地址变为了YYYY。
既然解释器每次在保存变量值(指向地址)时,都要识别值得类型并关联到变量,所以效率肯定会低一点吧。(如果解释执行器是这么运作的话,Python可是有不止一种解释执行器,所以也得看开发解释执行器的人的设计啦)。
四、id() is() 与 ==
id()函数非常好理解,就是求变量地址,例子如下,注意同样是值1,可能对应的地址是不同的,因为在内存为1分配地址时分配了不同地址。
了解了id(),那么is()和==的区别就好理解了。==就是看值相等不,相等就返回True。而is()就是看id相等不,相等就返回True。
举个例子:
本篇主要介绍Python作为一种动态语言的动态特点、Python的变量保存、以及id()函数和is()函数和==操作符之间爱恨纠缠的关系。
二、动态语言
首先所谓的动态语言、静态语言,其实就是针对变量的类型而言的。
静态语言比较常见的如Java和C#,你在定义变量的时候就得说好了它是啥类型如:
int num;
动态语言就不必,为啥不必呢,因为无所谓啊。动态语言的变量可以随时改变类型哦,比如:
a=1#此时a是一个整数类型 a=0.1#变成了浮点数类型 a="Hello"#又变成了字符串类型
OK,那么好像看起来,动态语言更灵活,更牛逼一点。是的,是更灵活,但是既然要到运行的时候才能确定怎么存储、使用这些变量,肯定会在某些方面(比如性能)上有弱点吧,金无赤足,各有所长嘛。
三、Python变量的保存
那么看似牛X的Python变量是如何可以切换类型的呢,其实真正牛的不是Python变量,而是Python语言的解释执行器。
举个例子如下,解释器可以这么运作。首先在内存中地址为XXXX的地方存了一个变量1,然后运行到a=1时,发现整数1要赋值给变量a,所以解释器就知道了啊哈变量a是整型,然后a其实保存的是地址XXXX。
然后运行到a=0.1,解释执行器在内存中地址为YYYY的地方存了0.1,然后知道了啊哈a是浮点类型,然后a保存的地址变为了YYYY。
a=1 a=0.1
既然解释器每次在保存变量值(指向地址)时,都要识别值得类型并关联到变量,所以效率肯定会低一点吧。(如果解释执行器是这么运作的话,Python可是有不止一种解释执行器,所以也得看开发解释执行器的人的设计啦)。
四、id() is() 与 ==
id()函数非常好理解,就是求变量地址,例子如下,注意同样是值1,可能对应的地址是不同的,因为在内存为1分配地址时分配了不同地址。
a=1 print(id(a))#输出3543160
了解了id(),那么is()和==的区别就好理解了。==就是看值相等不,相等就返回True。而is()就是看id相等不,相等就返回True。
举个例子:
a=1 b=1.0 a==b#True,值就是相等哦 a is b#False,地址肯定不一样 c=1 a is c#True,这个应该看解释器了,如果解释器为常量1分配一样的地址就相等了,也有可能解释器特殊喜欢分配不同地址。
相关文章推荐
- Python 学习笔记: id(), ==, is 之间的区别
- Python学习笔记之全局变量
- C/C++中关于地址、指针和引用变量的学习笔记(七) : sizeof和typedef
- Python学习笔记--变量赋值过程
- 【Python学习笔记】《和孩子一起学编程》第2章 记住内存和变量
- Python学习笔记(2)-局部变量与全局变量
- Think Python 学习笔记2:变量、表达式和声明
- C/C++中关于地址、指针和引用变量的学习笔记(五) : 指针
- Python学习笔记之全局变量
- Python学习笔记02 变量和程序的编写
- C/C++中关于地址、指针和引用变量的学习笔记(八) : 命令行参数
- python_变量+循环学习笔记
- Python 学习笔记(一)语句,变量,函数
- Python学习笔记--变量和赋值
- python学习笔记——1_变量
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- python 学习笔记 标识符和变量(3)
- python学习笔记之语言、调试、语法、变量、表达式
- python 学习笔记- 变量赋值
- C/C++中关于地址、指针和引用变量的学习笔记(一)