什么是python语言的动态类型机制_理解Python的Dynamic typing
Python的Dynamic typing有些类似于C语言的指针,在C中,一个变量可以指向任何地址空间,在Python中,一个变量也可以指向任何type的数据对象。变量的指向可以在程序运行过程中变化,这就是我理解的Dynamic typing。
Python是高层次的编程语言,在使用Python的时候,我们要忘掉用C开发时的习惯,不要关注底层细节。不需要关心这个变量占几个字节,不需要考虑这个指针free之后,有没有赋空值,不需要考虑溢出等等。
在Python中,所有的一切都是对象,包括一个小小的变量。先看下面的代码示例:
>>> aa = 1
>>> id(aa)
1469710800
>>> aa = 2
>>> id(aa)
1469710832
id这个builtin函数返回的是变量所指向的地址,当然,这个地址我们看不懂,不过至少我们可以看到,在给aa重新赋值之后,地址变了!
这里就是理解Python Dynamic typing的关键:
给aa重新赋值,不是改变aa的值,而是让aa指向另外一个地址,这个地址含有一个新的值!
Python中变量是类似于C语言的指针的存在
我们还可以这样:
>>>
>>> aa = 1
>>> id(aa)
1469710800
>>> aa = 2
>>> id(aa)
1469710832
>>>
>>> aa = '333'
>>> id(aa)
10637360
让aa指向一个string对象。
再看两个图:
共享引用
改变的值指向,而不是对象值
Python的垃圾回收
Python是使用引用计数方式来进行垃圾收集。
例如上例中当aa重新被赋值'333'时候,由于对象1和2的引用计数从1到0(给aa赋值'333'时候'333'的引用计数加1),所以自动进行了垃圾回收.
但是有个问题是:如果在Python中发生,两个对象互相引用,那么引用计数的方式是否会失效?还是Python本身也可以使用"离开作用域则对象失效"的垃圾收集方式。这确实无法避免(互相引用),所以有些Python实现使用了"离开作用域则进行变量销毁"的垃圾收集机制。
可变(mutable)对象和不可变(immutable)对象
元组(tuple)、数值型(number)、字符串(string)均为不可变对象;
而字典型(dictionary),列表型(list),集合(set)的对象是可变对象。(Python官方对mutable对象的解释是:Mutable objects can change their value but keep their id().)
我的理解:对象是不可变的,即变量指向的那块内存空间的内容不能变;对象是可变的,即变量指向的那块内存空间的内容可以改变。而函数调用,传递的都是变量的指向(ref)。
>>> kk = 5
>>>
>>> def test(pp):
... print(id(pp))
...
>>>
>>> id(kk)
1469710928
>>> test(kk)
1469710928
>>>
变量引用的比较
直接看代码吧:
>>> aa = 1
>>> id(aa)
1469710800
>>> aa = 2
>>> id(aa)
1469710832
>>>
>>> aa = '333'
>>> id(aa)
10637360
>>>
>>> bb = aa
>>> bb == aa
True
>>> bb is aa
True
>>>
>>> import sys
>>> sys.getrefcount(1)
106
>>> sys.getrefcount(2)
76
>>> sys.getrefcount('333')
4
>>> sys.getrefcount(aa)
3
>>> sys.getrefcount(bb)
3
>>>
可以直接使用is来进行比较判断。
什么是python语言的动态类型机制_理解Python的Dynamic typing相关推荐
- 什么是python语言的动态类型机制_python的内存管理机制
一.python是一个什么样类型的语言 1.python是一种动态解释性强类型定义的高级.通用性编程语言. 解释型:执行的时候,才一条一条的解释成机器语言给计算机来执行.如:python.js.rub ...
- python语言特点粘性扩展_010 深入理解Python语言
[TOC] 一.概述 计算机技术的演进 编程语言的多样初心 Python语言的特点 "超级语言"的诞生 二.计算机技术的演进 2.1 计算机技术的演进过程 - - - 2017- ...
- python语言的变量特点随时_【Python】Python语言特点
Python语言强调简洁直观.可读性强,常被称为"可执行的伪代码". 一.一切都是对象 Python是面向对象的编程语言,数.字符串.数据容器.函数.类.模块(函数)等都是对象.每 ...
- 采用python语言实现猜数游戏_用python实现猜数游戏
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 ...
- python语言的记事本在哪_入门Python语言记事本03
本文主要向大家介绍了入门Python语言记事本03,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断.比如,输入用户年龄, ...
- python语言下划线怎么打_初学Python语言者必须理解的下划线
下划线(_)在Python语言中有特殊作用. 在大多数编程语言中,下划线是命名变量或者函数名称时的连字符,但是,在Python语言中,不仅如此.如果你是一名Python程序员,对于诸如 _ in ra ...
- python语言的核心理念是_学习Python语言四大核心优势
1.行业前景好 全球前四大流行语言之一,根据TIOBE最新排名 ,Python已超越C#,与Java,C,C++一起成为全球前4大最流行语言.且,国内目前百度指数搜索量已经超越Java,与C++,即将 ...
- python语言的运行效率高吗_为什么Python效率这么低,还这么火?
这是一个引战的话题,不过我还是想说几句. 任何一个讨论语言效率问题的人,请先问下有没有搞清楚什么是效率? 软件工程发展至今,大型系统基本不可能通过一种语言去架构,c语言到是效率高来着?能去写一个web ...
- python语言最适合的领域_掌握python语言可以做什么?十大应用领域介绍
python作为一门当下极其火爆的编程语言,得到世界范围内无数编程爱好者和开发者喜欢并不是偶然的,除了要比其他编程语言更容易入门,python还拥有无比广阔的应用前景,薪资待遇也非常不错. 1. WE ...
最新文章
- [No000010F]Git8/9-使用GitHub
- XCTF-MISC-新手区-gif
- SAP Spartacus的登录页面的用户名显示逻辑
- 2021甘肃高考成绩查询时间几点,2021年甘肃高考成绩什么时候出来,今天几点钟出成绩可以查询...
- 入门机器学习,这一步必不可少!
- c 语言随机验证码原理,用C生成随机中文汉字验证码的基本原理及代码.doc
- Java反编译工具:Java Decompiler
- 【luogu1018】 乘积最大 [区间dp+高精][noip2000]
- android搜索框布局文件,android搜索框列表布局,流程及主要步骤思维导图
- C语言程序设计第四次作业
- 【SketchUp插件】10款吊炸天的SU插件,拿走不谢!
- app指纹登录 java后端_Android应用实现指纹登录
- MBTI职业倾向测验
- 久处不厌,闲谈不烦。从不敷衍,绝不怠慢
- 怎样恢复计算机到桌面,电脑任务栏怎么还原到下面 电脑任务栏还原方法【图文】...
- 安卓识别身份证,自动提取身份证信息功能实现(附源码)
- java生成图章到word_JAVA不使用POI给Word文档添加水印
- c++内存管理1:primitives
- 用表格完成个人信息网页的设计 基本信息:姓名,学号,出生日期,手机号码,证件类型,证件号码,学校,学院,专业,学制,入学时间,个人证件图像兴趣爱好
- Java基础数据类型二进制转换
热门文章
- LeetCode之Remove Duplicates from Sorted Array II
- Eclipse之Android项目名有红感叹号的解决办法
- TCP握手/挥手的过程分析
- 看得懂的设计模式 享元模式python3 最基本(简单)实现
- k8s mysql数据同步_K8s——MySQL实现数据持久化
- python实验原理_Python实验报告八
- c语言十佳运动员有奖评选系统_2019年沃德十佳内饰解读
- python重构函数_Python代码重构
- 单身两年以上是什么体验?
- 爱思助手短信备份到安卓_爱思助手肿么将短信导入iphone