一入python深似海--变量和对象
一、基本原理
Python中一切都是对象,变量是对象的引用。
这是一个普遍的法则。我们举个样例来说。Python是怎样来处理的。
x = 'blue'
y = 'green'
z = x
当python运行上面第一句的时候,会在heap中首先创建一个str对象,其文本内容为blue。同一时候还创建一个名为x的对象引用。x引用的就是这个str对象。
第二句也是类似;第三条创建了一个名为z的新对象引用。并将其设置为对象引用x所指向的同样对象。例如以下图的变化。

所以看出在Python中赋值操作符号“=”的作用是,将对象引用和内存中的某个对象进行绑定。假设对象已经存在,就进行简单的又一次绑定。以便引用“=”右边的对象;假设对象引用尚未存在。就首先创建对象,然后将对象引用和对象进行绑定。
Python使用“动态类型”机制,也就是说,在Python程序中。不论什么时候能够依据须要,某个对象引用都能够又一次绑定到还有一个不同的对象上(不要求是同样的类型)。这和其它强化型语言如(C++,Java)不太一样,仅仅同意又一次绑定同样类型的对象上。
在Python中,由于有“动态类型”机制,所以一个对象引用能够运行不同类型的对象适用的方法。当一个对象不存在不论什么对象引用的时候。就进入了垃圾收集的过程。
查看类型程序:
import types
type(100)
>>> a=100
>>> a/10
10
>>> a[0] Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
a[0]
TypeError: 'int' object has no attribute '__getitem__'
>>> a='hello'
>>> a[0]
'h'
>>> a/10 Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
a/10
TypeError: unsupported operand type(s) for /: 'str' and 'int'
>>>
第一句 a = 100
Python会在heap创建一个int对象。其内容为100。同一时候创建a变量,其值指向heap中的int对象

第二句 a/10
Python适用“动态类型”机制,推断a指向的对象是int型,能够适用/(除法)操作。
于是便进行运算产生结果。
(它会在heap中在创建一个10.0的对象么?
)
第三句 a[0]
Python适用“动态类型”机制,推断a指向的对象是int型,并不适用[](分片)操作。于是就进行报错。
第四句 a = 'hello'
Python会在heap创建一个str对象。其内容为hello。同一时候改变a变量,使得其值指向heap中的str对象。同一时候原来的int对象。因为不在存在对象引用。所以就进入了垃圾收集过程。

第五句 a[0]
Python适用“动态类型”机制,推断a指向的对象是str型。能够适用[](分片)操作。于是便进行运算产生结果。
第六句 a/10
Python适用“动态类型”机制,推断a指向的对象是str型,并不适用/(除法)操作。于是就进行报错。
总之 :在Python中一切都是对象,变量总是存放对象引用。当一个对象没有变量指向它的时候,它便进入了垃圾收集过程。Python的“动态类型”机制,负责检查变量的对象引用适用操作。
假设该对象不适用该操作。则会直接报错。一句话”变量无类型。对象有类型 “
二、python的id()。==,is的区别
1. id():获取的是对象在内存中的地址
2. is :比对2个变量的对象引用(对象在内存中的地址。即id() 获得的值)是否同样。假设同样则返回True。否则返回False。
换句话说,就是比对2个变量的对象引用是否指向同一个对象。
3. ==:比对2个变量指向的对象的内容是否同样。
一入python深似海--变量和对象的更多相关文章
- 一入python深似海--浅拷贝与深拷贝
python中有一个模块copy,deepcopy函数用于深拷贝,copy函数用于浅拷贝. 要理解浅拷贝,必须先弄清楚python中的引用. 引用 Python中一切都是对象,变量中存放的是对象的引用 ...
- 一入python深似海--dict(字典)的一种实现
以下是python中字典的一种实现.用list数据结构实现字典.详细是这种:[[(key1,value1),(key2,value2),...],[],[],...] 内部每个hash地址是一个lis ...
- 一入python深似海--class
python class 分为三个部分:class and object(类与对象),inheritance(继承),overload(重载)and override(覆写). class and o ...
- 一入python深似海--range()、list与for
range使用方法 使用python的人都知道range()函数非常方便,今天再用到他的时候发现了非常多曾经看到过可是忘记的细节. 这里记录一下: range(1,5)#代表从1到5(不包括5) [1 ...
- 一入python深似海--python之道
python社区不乏幽默.先来看"python之道"这首诗. 导入this包: import this 输出是一首诗,这首诗总结了Python的风格,能够指导Python程序猿的编 ...
- 一入python深似海--对象的属性
Python中一切皆是对象,每一个对象都能够有多个属性.Python是怎样管理这些属性呢?我们来探讨一下. 属性的__dict__系统 对象的属性包括两部分:类属性和对象属性.对象的属性可能来自于其类 ...
- 一入Python深似海--print
先给大家来个干货^~^,学习Python的一个好站点,http://learnpythonthehardway.org/book/ 经典样例 以下是几个老经典的样例喽,刚接触Python的能够敲一敲, ...
- 「一入 Java 深似海 」系列课程
第一期 「一入 Java 深似海 」系列课程 - 第一期 第一节:Java 语言基础
- 一入Java深似海
Java的基础语法 一个java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来写协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象: 对象是一个类的实例,有状态和行为.例如 ...
随机推荐
- 阿里云 oss python3 样例
阿里云的oss SDK又是不支持python3,头疼头疼. 本想改一改它的SDK,让它支持python2+python3,无奈里面大量的代码使用不带括号的print.工作量恐怖. 幸好oss的使用很e ...
- 开始使用Bootstrap
bootstrap使用到的图标字体文件格式有 .woff,IIS7下需要添加MIME映射:.woff application/x-font-woff
- MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)
Mysql Proxy Lua读写分离设置 一.读写分离说明 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELE ...
- Scroller应用:ListView滑动删除
1.设计思路 在Scroller的应用--滑屏实现中使用Scroller实现滑屏效果,这里使用Scroller与ListView实现相似QQ滑动.然后点击删除功能.设计思路是Item使用Scrolle ...
- asp.net,cookie,写cookie,取cookie(转载)
Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...
- Openresty + nginx-upload-module支持文件上传
0. 说明 这种方式其实复杂,麻烦!建议通过这个方式搭建Openresty文件上传和下载服务器:http://www.cnblogs.com/lujiango/p/9056680.html 1. 包下 ...
- C#遍历计算机上所有的文件
class Program { static List<string> allFileName=new List<string>(); static void Main(str ...
- Oracle配置客户端
一.引言 当我们需要连接远程的Oracle数据库服务器时,就需要在自己的机器上安装Oracle客户端了. 二.安装步骤与配置 参考:http://blog.csdn.net/luiseradl/art ...
- qt中执行 sql文件的方法
由于qt中没有原生的执行sql文件的方法.因此我们需要根据sql文件中的流的特点,将其分解成一个个语句单独执行. 1.首先通过Qfile读取sql文件 2.将sql文件中的内容通过“:”进行拆解 3. ...
- LCD屏参数及应用举例
1. LCD参数及原理 R G B 信号 PCLK(像素时钟),LCLK(HSYNC,线时钟,水平同步时钟),FCLK(VSYNC,帧时钟,垂直同步时钟) 7寸屏一般由两种工作模式DE和时钟模式, ...