python学习手册(第4版) 第六章

本文介绍了Python中动态类型的特性,包括变量的使用无需声明、数据类型作为对象的初始化及重新赋值的意义。同时深入探讨了引用、对象的内存管理机制、循环引用问题以及共享引用与拷贝的区别。

回顾第五章,学习了关于数值数据类型的一些运算和相关处理函数。

比如判断浮点数的小数部分是否为0(a.is_integer())、floor除法和截断除法(math.trunc(-2.5))的不同、两种列表的切片使用方法、运算的优先级排名、多态的理解(如'+'运算符号的操作对象为数值和字符串时,运算方式不同)。

现在学习第六章,动态类型简介

1.类似多态的概念,python中变量的使用无须提前声明,根据赋值的数据类型来确定变量的数据类型。

2.数据类型也是对象,变量使用前必须进行数据类型对象的初始化。

3.变量重新赋值,意味着重新进行数据类型对象的初始化。


引用:

1.在python中从变量到对象的连接称作引用;

2.引用是一种关系,以内存中指针的形式实现。


对象:

1.python分配的一块内存,有足够的空间去表示它们的值。

2.每个对象都有两个标准的头信息,一个为类型标志符(标识对象类型),一个为引用计数器(用来决定是不是可以回收这个对象)。


循环引用

>>>a = [1,2,3]

>>>a

[1,2,3]

>>>a.append(a)       #列表引用自身,这样的话,对象[1,2,3]的引用计数器不会为0,即不会被清除,被特别对待

[1,2,3,[...]]

>>>a[3][3][2]

3


共享引用和拷贝

1.当共享引用的对象为不可变对象(数值、字符串等),共享同一个引用的变量改变引用后,其他引用这个对象的变量不会发生改变。

2.当共享引用的对象为可变对象(列表等),共享同一个引用的变量通过对象的方法来进行值的改变,将改变其他引用这个对象的变量的值,因为它使用的是共享对象的方法,改变的是对象自身,而不是改变的引用关系。

3.如果不想共享引用对象,可以使用列表的切片方法得到的值再用来赋值,此时环境为列表切片得到的值再分配一个内存,它表示一个新的数据对象。

4.拷贝(针对含列表的字典和元组),如:

>>>b = {'a':[1,2,3]}

>>>import copy

>>>c = copy.copy(b)   #通用拷贝,仅拷贝了引用

>>>d = copy.deepcopy(b)   #深度拷贝,即拷贝了引用,又拷贝的值。

>>>b['a'][0] =  4

>>>b

{'a':[4,2,3]}

>>>c     #仅拷贝了引用,引用的对象的值改变,它的值也改变

{'a':[4,2,3]}

>>>d      #深度拷贝,把值也拷贝下来了,不随原始的引用的对象的值改变而改变

{'a':[1,2,3]}


动态类型是python多态的根本



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值