栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python的动态类型

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python的动态类型

变量、对象、引用

为什么在python中不需要像c语言一样先声明对象的类型再对变量进行初始化呢?这就涉及到了python的动态类型

例子:

>>> a=3

当使用变量a来代表3时python会执行三个步骤:

1、分配内存空间来创建一个对象存储值3

2、创建一个变量a,如果还没被创建的话

3、将变量a与对象相连接

变量在赋值的时候才被创建,它可以引用任何类型的对象。变量实际上是到对象内存空间的一个指针。

类型属于对象而不是变量

在python中,对象有两个标准的头部信息:

(1)类型标志符:标示着这个对象的类型

(2)引用计数器:记录有多少个变量引用这个对象

变量名没有类型,类型属于对象。

垃圾回收机制()

当一个变量名被赋予一个新的对象,如果原来的对象没有被任何变量名所引用的话,之前对象占用的空间将被回收。

>>> x=42
>>> x='liu'

当变量x被连接到新的对象上时,之前的对象42将被清除。

对象的垃圾回收是通过引用计数器来实现的。当引用计数器为0时此对象将被清除。

共享引用与对象的修改

共享引用要求两个不同的变量能够引用同一个对象,指向相同的内存空间。

例子:

>>> L1=[1,2,3,4]
>>> L2=L1
>>> L2[1]=5
>>> L1
[1, 5, 3, 4]
>>> L2
[1, 5, 3, 4]

当L1与L2指向同一个对象时,通过L2改变第二个数的值,通过L1显示也发现改变了。这是因为通过变量修改了对象内存空间里的值,两个变量指向同一块内存空间,所以通过一个变量修改值,另一个变量也会显现出修改后的状态。

这种行为仅支持原位置可改变的可变对象,如列表、字典等,但当对象是字符串或数字时,不能进行修改。

在程序中应当尽量避免出现上述例子的情况,可以使用copy()方法来复制一个对象,复制后的对象与原对象在不同的内存空间。

>>> L1=[1,2,3,4]
>>> L2=L1.copy()
>>> L2[1]=5
>>> L1
[1, 2, 3, 4]
>>> L2
[1, 5, 3, 4]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/589946.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号