Python变量和对象
2015-09-26 17:33
489 查看
参考链接:http://www.linuxidc.com/Linux/2012-09/69523.htm
Python中一切都是对象,赋值的作用就是让变量指针指向某个对象,也就是说变量中存放的对象的引用,而对象的引用是指向这个对象。以下面语句为例:
python执行第一句时,在heap中首先创建str对象,其文本内容为blue,同时还创建变量名为x的对象引用,x引用的就是这个str对象;
第二句类似,创建变量y指向str对象;第三句创建变量z的新对象引用,并将其指向对象引用x指向的相同对象。
可以看出在Python中赋值操作符号“=”的作用是,将对象引用和内存中的某个对象进行绑定。如果对象已经存在,就进行简单的重新绑定,以便引用“=”右边的对象;如果对象引用尚未存在,就首先创建对象,然后将对象引用和对象进行绑定。这很类似与c中的指针的概念。
如下语句示例:
Python执行第一句时在heap中创建int对象,其内容为100,同时创建对象引用a,其值指向heap中int对象;
第二句“a/10”,Python适用“动态类型机制”,判断a指向对象是int型,可以使用除法操作,便进行运算产生结果;
第三句,由于a指向int型,并不适用[](分片)操作,于是报错;
第四句,Python会在heap中创建str对象,其内容为hello,同时改变a变量,使其值指向heap中str对象,同时原来int对象,由于不存在对象引用,就进入垃圾回收过程;
后续语句类似操作。
;
2、is:比对2个变量的对象引用(对象在内存中的地址,即id() 获得的值)是否相同。如果相同则返回True,否则返回False。换句话说,就是比对2个变量的对象引用是否指向同一个对象。
3、==:对比2个变量指向对象的内容是否相同。
可变对象list和不可变对象
总结
在Python中一切都是对象,变量总是存放对象引用。当没有变量指向对象时,这个对象便进入了垃圾收集过程。Python的“动态类型”机制,负责检查变量的对象引用适用操作。如果该对象不适用该操作,则会直接报错。一句话”变量无类型,对象有类型 “。Python变量
Python中若要使用变量,不需要提前声明,也不需要指定类型,只需要在用的时候,给变量赋值即可。Python中一切都是对象,赋值的作用就是让变量指针指向某个对象,也就是说变量中存放的对象的引用,而对象的引用是指向这个对象。以下面语句为例:
x = "blue" y = "green" z = x
python执行第一句时,在heap中首先创建str对象,其文本内容为blue,同时还创建变量名为x的对象引用,x引用的就是这个str对象;
第二句类似,创建变量y指向str对象;第三句创建变量z的新对象引用,并将其指向对象引用x指向的相同对象。
可以看出在Python中赋值操作符号“=”的作用是,将对象引用和内存中的某个对象进行绑定。如果对象已经存在,就进行简单的重新绑定,以便引用“=”右边的对象;如果对象引用尚未存在,就首先创建对象,然后将对象引用和对象进行绑定。这很类似与c中的指针的概念。
动态类型机制
Python使用“动态类型”机制,也就是说,在Python程序中,任何时候可以根据需要,某个对象引用都可以重新绑定到另一个不同的对象上(不要求是相同的类型),这和其他强化型语言如(C++,Java)不太一样,只允许重新绑定相同类型的对象上。在Python中,因为有“动态类型”机制,所以一个对象引用可以执行不同类型的对象适用的方法。当一个对象不存在任何对象引用的时候,就进入了垃圾收集的过程。(Python自动回收机制)如下语句示例:
a = 100 print a / 10 10 print a[0] Traceback (most recent call last): File "<string>", line 1, in <fragment> TypeError: 'int' object has no attribute '__getitem__' a = "hello" print a[0] h a / 10 Traceback (most recent call last): File "<string>", line 1, in <fragment> TypeError: unsupported operand type(s) for /: 'str' and 'int'
Python执行第一句时在heap中创建int对象,其内容为100,同时创建对象引用a,其值指向heap中int对象;
第二句“a/10”,Python适用“动态类型机制”,判断a指向对象是int型,可以使用除法操作,便进行运算产生结果;
第三句,由于a指向int型,并不适用[](分片)操作,于是报错;
第四句,Python会在heap中创建str对象,其内容为hello,同时改变a变量,使其值指向heap中str对象,同时原来int对象,由于不存在对象引用,就进入垃圾回收过程;
后续语句类似操作。
;
id(),==,is差别
1、id():获取对象在内存中的地址2、is:比对2个变量的对象引用(对象在内存中的地址,即id() 获得的值)是否相同。如果相同则返回True,否则返回False。换句话说,就是比对2个变量的对象引用是否指向同一个对象。
3、==:对比2个变量指向对象的内容是否相同。
l1 = [1, 2, 3] l2 = [1, 2, 3] print l1 == l2 <span style="font-family: Arial, Helvetica, sans-serif;">#两个变量指向对象值相等,故返回true</span> print l1 is l2 <span style="font-family: Arial, Helvetica, sans-serif;">#l1和l2貌似指向同一个对象[1, 2, 3],但在内存中其实是两块不相关的东西,故返回false</span> l3 = l1 print l3 is l1 #l3和l1指向同一个对象,故返回true l3[0] = 4 print l1 #[4, 2, 3] print l3 #[4, 2, 3] print l2 #[1, 2, 3] a = 100 b = 100 print a is b #不同于list对象,返回true
可变对象list和不可变对象
相关文章推荐
- Python包管理pip工具在Mac OSX10.10上的安装及lxml安装错误的解决办法
- 用python发布一条微博
- 使用 python3 环境开发。
- Python大数据依赖包安装
- 用Python学习统计学基础-4
- 【Python注意事项】如何理解python中间generator functions和yield表情
- python2.7 中使用pip遇到的几个问题
- Python常用模块
- python如何生成exe
- python正则表达式
- python中requests模块的安装
- python学习(一):环境安装及HelloWorld
- Python基础入门之(数字、字符串)
- python学习(一) 环境部署
- Python已安装第三方库
- [Python]分享一些用来简化与SQL Server交互的函数
- Python赋值魔法技巧
- Python | The Zen of Python
- Python使用struct处理二进制
- LeetCode----Majority Element