前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python动态类型简介

Python动态类型简介

作者头像
py3study
发布2020-01-06 22:09:01
6950
发布2020-01-06 22:09:01
举报
文章被收录于专栏:python3python3

在C语言中使用变量, 需先声明其类型, 如int a = 3, 而Python中直接 a = 3就行, Python怎么知道那代表了一个整数呢? 

在Python中类型是在运行过程中决定的, 而不是事先声明的. 像上面Python中运行赋值语句 a = 3, 代码中没有说明a是整数对象类型, 但一样也能工作, 可按如下思路来理解该原由.

变量创建: 一个变量, 就像a, 当代码第一次给它赋值时就创建了它, 之后的赋值将会改变已创建的变量名的值.

变量类型: 变量永远不会有任何的和它关联的类型信息或约束. 类型的概念是存在于对象中而不是变量名中. 变量原本是通用的, 它只是在一个特定的时间点, 简单地引用了一个特定的对象而已.

变量使用: 当变量出现在表达式中时, 它会马上被当前引用的对象所代替, 无论这个对象是什么类型. 此外, 所有的变量必须在其使用前明确的赋值, 使用未赋值的变量会产生错误.

动态语言的类型和静态语言的有明显不同, 若能清楚的将变量名和对象划分开来, 动态类型是很容易理解的.

>>> a = 3

从上面的概念来看, Python会执行三个步骤去完成这个操作:

1. 创建一个对象来代表值3.

2. 创建一个变量a, 如果它还没有创建的话.

3. 将变量与新的对象3相连接.

效果图如下所示, 变量和对象保存在内存中不同的部分, 并通过连接相关联.

ref.jpg
ref.jpg

上面过程, 使用具体的术语来讲呢:

· 变量名是一个系统表的元素, 拥有指向对象空间的连接.

· 对象是分配的一块内存, 有足够的空间去表示它所代表的值.

· 引用是自动形成的从变量名到对象的指针.

类型属于对象, 而不是变量

Python中, 变量名没有类型, 对象才有类型. Python在每个对象上保存了类型标识, 和引用计数. 像下面变量a由引用整数3, 改变为引用字符串'spam'后, 3这个对象会发生什么变化呢, 进入下一个话题.

>>> a = 3

>>> a = 'spam'

对象的垃圾收集机制

上面说到了, Python在每个对象上保持了一个计数器, 其记录了指向该对象的引用数目, 一旦计数器被设置为0, 该对象的内存空间就会自动回收.

可以通过sys模块中的getrefcount函数, 查看对象的引用计数.

>>> import sys

>>> sys.getrefcount('spam')

3

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档