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

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

1,单个变量引用

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

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

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

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

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

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

2,共享引用

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

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

a=3

b=a

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

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

a=‘spam’

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

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

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

时间: 2024-08-09 06:33:11

Python学习笔记(五)Python动态类型和引用的相关文章

python学习笔记17(动态类型)

动态类型 在我们接触的对象中,有一类特殊的对象,是用于存储数据的,常见的该类对象包括各种数字,字符串,表,词典.在C语言中,我们称这样一些数据结构为变量,而在Python中,这些是对象. 对象是储存在内存中的实体.但我们并不能直接接触到该对象.我们在程序中写的对象名,只是指向这一对象的引用(reference). 引用和对象分离,是动态类型的核心.引用可以随时指向一个新的对象: a = 3 a = 'python' 第一个语句中,3是储存在内存中的一个整数对象,通过赋值,引用a指向对象3. 第二

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

python 学习笔记 7 -- Python关键字总结

0.写在前面的话 学习一门语言最重要的功课是练习与复习,在<笨方法学Python>中第三十七节虽然没有教你任何内容,但是它提醒我们:"学了这么多,你还能记得多少?该复习了!" 下面我们就对这一节的第一部分"关键字"来做个复习: Python中的关键字包括如下: and       del        from      not      while    as        elif       global    or       with     

python学习笔记(一):python简介和入门

最近重新开始学习python,之前也自学过一段时间python,对python还算有点了解,本次重新认识python,也算当写一个小小的教程.一.什么是python?python是一种面向对象.解释型的计算机语言,它的特点是语法简洁.优雅.简单易学.在1989诞生,Guido(龟叔)开发.这里的python并不是蟒蛇的意思,而是龟叔非常喜欢一部叫做<Monty Python飞行马戏团>的电视剧,所以以python命名(老外就是这么任性).二.解释型语言和编译型语言编译型语言就是先把写好的程序翻

python学习笔记(python发展介绍)

一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum) 目前python主要应用领域: ·云计算 ·WEB开发 ·科学运算.人工智能 ·系统运维 ·金融:量化交易,金融分析等,作为动态语言的python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛 ·图形GUI python是一门什么样的语言? 编程语言主要从以下几个角度进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言. 编译型和解释型 编译型,如:c,c++,

python学习笔记:python字符串

二.python字符串操作符 1. 对象标准类型操作符 Python对象的标准类型操作符一共就三种:对象值的比较.对象身份的比较.布尔类型.其中对象值的比较主要是大于.小于.不等于等的数学比较符:对象身份的比较主要是is和is not这两个符号:布尔类型主要是not.and.or等的逻辑运算符. 字符串标准类型操作符也是这些,在做比较操作的时候,字符串是按照ASCII值的大小来比较的. 2. 序列类型操作符 切片操作符 主要分为三种,分别是正向索引.反向索引.默认索引.下图中显示索引的编号: 注

python学习笔记(五):装饰器、生成器、内置函数、json

这周学习了装饰器和生成器,写下博客,记录一下装饰器和生成器相关的内容. 一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里面每个函数都加一个功能,用来统计每个函数的运行时间是多少,找出来运行比较慢的函数,来优化代码,就需要添加一个新的功能,来统计程序的运行时间,那这样的话,就得修改每个函数了,需要改代码,但是代码特别多,改完了公司倒闭了,这时候装饰

Python学习笔记五_数据类型(字符串)

已经学习过的数据类型包括:int.float.list.tuple.dict.这篇来单独记录下字符串.单独将字符串这种数据类型写出来,是因为python里有很多非常有用的字符串内置方法. 一.字符串定义 字符串可以存任意类型的字符串,比如名字,一句话等等. 1 name = 'Rebecca' 2 msg = 'Fighting' 二.字符串内置方法 1.常用方法 输出为字符串的方法 a = 'my name is Rebecca' print(a.capitalize()) #将字符串的第一个

Python学习笔记五:数字和字符串

数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间. Python数字类型转换 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象 tupl

Python学习笔记五--条件和循环

5.1 if语句 没什么好说,if语句语法如下: if expression: expr_true_suit 5.1.1多重条件表达式 单个if语句可以通过布尔操作符and,or,not实现多重条件判断或否定判断. if not warn and (system_load>=10): print 'WARNING:LOSING RESOURCE' warn+=1 5.2 else 语句 如果if条件为假程序将执行else后的语句. if expression: expr_true_suit el