码迷,mamicode.com
首页 > 编程语言 > 详细

Python学习笔记(五)Python动态类型和引用

时间:2014-09-15 17:45:40      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:python

动态类型以及由他提供的多态性是Python语言简洁性、灵活性的基础。Python中,类型是在运行过程中自动决定的,没有必要事先声明变量。记住,Python中变量和对象是划分开来的,这样才能能清楚的理解动态类型。再记住,赋值生成的是变量到对象的引用,而非拷贝。

1,单个变量引用

以a=3为例说明Python中单个变量引用的处理过程,

1)创建一个对象代表值3,此处是整型数字对象

2)如果变量a还没有被创建的话,创建变量a(已创建则无此步骤)

3)将变量与新的对象3连接

实际效果如下图所示,变量a和对象3保存在内存中的不同部分,通过连接相关联(C语言中变量名和变量值是一体的),从变量到对象的连接称为引用,引用就是自动形成的从变量到对象的指针。

bubuko.com,布布扣

bubuko.com,布布扣

Python中,变量名没有类型,它属于系统表的元素,同一个变量可以引用不同的对象类型(python中的变量类似于C语言中的void *型空指针,可以指向任意的数据类型)。对象才分类型,每个对象都有两个标准的头部信息:一个类型标识符表示对象类型,一个引用计数器来决定该对象是否可以被回收(计数器为0时回收对象)。每当一个变量被指向一个新的对象,若该变量之前指向的对象引用数已为0则该对象的内存空间就被Python自动回收--垃圾回收。正是这种垃圾回收机制,才使得Python中可以任意使用对象而不用担心内存释放等问题,这就省去了大批基础代码。

2,共享引用

1)不可变对象(数字、字符串、元组)的共享引用

多个变量引用同一个对象时,变量之间实质上是毫无关系的,分别创建了对同一个对象的引用。改变任何一个变量的引用并不影响其他变量。

a=3

b=a

分析上述语句阐述共享引用的处理,这里Python将创建变量a、b分别指向同一个整数对象3(即引用计数器为2),如下图。

 bubuko.com,布布扣bubuko.com,布布扣

若键入语句a=a+2,则是将变量a指向新的对象5,并不改变对象3的值(整数对象的不可变性),也并未改变变量b的引用。

    bubuko.com,布布扣

a=‘spam’

python执行上一句之后,变量a、b的引用情况变为:

bubuko.com,布布扣

 bubuko.com,布布扣

2)可变对象(列表、字典)的共享引用

可变对象的共享引用必须加倍小心,因为此时通过对一个变量的修改(当然,修改的是对象的值)也就影响到了其他变量,这类似与C语言中的函数引用传递或者多个指针指向同一段内存。标准库的copy模块可用来复制一个对象。

Python学习笔记(五)Python动态类型和引用

标签:python

原文地址:http://blog.csdn.net/suipingsp/article/details/39295295

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!