一、基本原理

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深似海--变量和对象的更多相关文章

  1. 一入python深似海--浅拷贝与深拷贝

    python中有一个模块copy,deepcopy函数用于深拷贝,copy函数用于浅拷贝. 要理解浅拷贝,必须先弄清楚python中的引用. 引用 Python中一切都是对象,变量中存放的是对象的引用 ...

  2. 一入python深似海--dict(字典)的一种实现

    以下是python中字典的一种实现.用list数据结构实现字典.详细是这种:[[(key1,value1),(key2,value2),...],[],[],...] 内部每个hash地址是一个lis ...

  3. 一入python深似海--class

    python class 分为三个部分:class and object(类与对象),inheritance(继承),overload(重载)and override(覆写). class and o ...

  4. 一入python深似海--range()、list与for

    range使用方法 使用python的人都知道range()函数非常方便,今天再用到他的时候发现了非常多曾经看到过可是忘记的细节. 这里记录一下: range(1,5)#代表从1到5(不包括5) [1 ...

  5. 一入python深似海--python之道

    python社区不乏幽默.先来看"python之道"这首诗. 导入this包: import this 输出是一首诗,这首诗总结了Python的风格,能够指导Python程序猿的编 ...

  6. 一入python深似海--对象的属性

    Python中一切皆是对象,每一个对象都能够有多个属性.Python是怎样管理这些属性呢?我们来探讨一下. 属性的__dict__系统 对象的属性包括两部分:类属性和对象属性.对象的属性可能来自于其类 ...

  7. 一入Python深似海--print

    先给大家来个干货^~^,学习Python的一个好站点,http://learnpythonthehardway.org/book/ 经典样例 以下是几个老经典的样例喽,刚接触Python的能够敲一敲, ...

  8. 「一入 Java 深似海 」系列课程

    第一期 「一入 Java 深似海 」系列课程 - 第一期 第一节:Java 语言基础

  9. 一入Java深似海

    Java的基础语法 一个java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来写协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象: 对象是一个类的实例,有状态和行为.例如 ...

随机推荐

  1. js实现页面跳转的两种方式

      CreateTime--2017年8月24日08:13:52Author:Marydon js实现页面跳转的两种方式 方式一: window.location.href = url 说明:我们常用 ...

  2. C# 利用反射拷贝类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. 常见SQL Server导入导出数据的几个工具

    摘自:http://www.cnblogs.com/chenxizhang/archive/2011/06/09/2076542.html 在我们的日常工作中,与数据库打交道的机会越来越多.这一篇文章 ...

  4. (一)Solr——简介和安装配置

    1. solr简介 1.1 Solr是什么 Solr是apache的顶级开源项目,它是使用java开发 ,基于lucene的全文检索服务器. Solr和lucene的版本是同步更新的,最新的版本是7. ...

  5. 0基础的小白怎么学习Java?

    自身零基础,那么我们应该先学好Java,首先我们来了解下Java的特性: Java语言是简单的 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java.另一方面,Jav ...

  6. cascade=CascadeType.ALL的深坑

     cascadetype是 级联的配置 all标示所有都级联操作   默认级联查询都是开启的 all标示 删除和update都级联操作 现在是 save的时候 他会级联保存一条数据 但是由于原有id已 ...

  7. Js日常笔记之数组

    1.Array构造函数有一个很大的问题,就是不同的参数,会导致它的行为不一致,es6好像专门为此对数组有升级 因此,不建议使用new Array生成新数组,直接使用数组字面量[...]是更好的做法. ...

  8. 【原创】打造基于Dapper的数据访问层

    [原创]打造基于Dapper的数据访问层   前言 闲来无事,花几天功夫将之前项目里用到的一个数据访问层整理了出来.实现单个实体的增删改查,可执行存储过程,可输出返回参数,查询结果集可根据实际情况返回 ...

  9. PHPExcel_Reader_Exception: is not recognised as an OLE file in Classes问题解决方法

    $filename="student.xlsx";//指定excel文件 $temp=substr($filename,strpos($filename,"." ...

  10. LAMP架构三

    PHP相关配置 1.查找php配置文件/usr/local/php/bin/php -i或者phpinfo() [root@bogon admin]# /usr/local/php/bin/php - ...