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相关推荐

  1. 什么是python语言的动态类型机制_python的内存管理机制

    一.python是一个什么样类型的语言 1.python是一种动态解释性强类型定义的高级.通用性编程语言. 解释型:执行的时候,才一条一条的解释成机器语言给计算机来执行.如:python.js.rub ...

  2. python语言特点粘性扩展_010 深入理解Python语言

    [TOC] 一.概述 计算机技术的演进 编程语言的多样初心 Python语言的特点 "超级语言"的诞生 二.计算机技术的演进 2.1 计算机技术的演进过程 - - - 2017- ...

  3. python语言的变量特点随时_【Python】Python语言特点

    Python语言强调简洁直观.可读性强,常被称为"可执行的伪代码". 一.一切都是对象 Python是面向对象的编程语言,数.字符串.数据容器.函数.类.模块(函数)等都是对象.每 ...

  4. 采用python语言实现猜数游戏_用python实现猜数游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 ...

  5. python语言的记事本在哪_入门Python语言记事本03

    本文主要向大家介绍了入门Python语言记事本03,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断.比如,输入用户年龄, ...

  6. python语言下划线怎么打_初学Python语言者必须理解的下划线

    下划线(_)在Python语言中有特殊作用. 在大多数编程语言中,下划线是命名变量或者函数名称时的连字符,但是,在Python语言中,不仅如此.如果你是一名Python程序员,对于诸如 _ in ra ...

  7. python语言的核心理念是_学习Python语言四大核心优势

    1.行业前景好 全球前四大流行语言之一,根据TIOBE最新排名 ,Python已超越C#,与Java,C,C++一起成为全球前4大最流行语言.且,国内目前百度指数搜索量已经超越Java,与C++,即将 ...

  8. python语言的运行效率高吗_为什么Python效率这么低,还这么火?

    这是一个引战的话题,不过我还是想说几句. 任何一个讨论语言效率问题的人,请先问下有没有搞清楚什么是效率? 软件工程发展至今,大型系统基本不可能通过一种语言去架构,c语言到是效率高来着?能去写一个web ...

  9. python语言最适合的领域_掌握python语言可以做什么?十大应用领域介绍

    python作为一门当下极其火爆的编程语言,得到世界范围内无数编程爱好者和开发者喜欢并不是偶然的,除了要比其他编程语言更容易入门,python还拥有无比广阔的应用前景,薪资待遇也非常不错. 1. WE ...

最新文章

  1. [No000010F]Git8/9-使用GitHub
  2. XCTF-MISC-新手区-gif
  3. SAP Spartacus的登录页面的用户名显示逻辑
  4. 2021甘肃高考成绩查询时间几点,2021年甘肃高考成绩什么时候出来,今天几点钟出成绩可以查询...
  5. 入门机器学习,这一步必不可少!
  6. c 语言随机验证码原理,用C生成随机中文汉字验证码的基本原理及代码.doc
  7. Java反编译工具:Java Decompiler
  8. 【luogu1018】 乘积最大 [区间dp+高精][noip2000]
  9. android搜索框布局文件,android搜索框列表布局,流程及主要步骤思维导图
  10. C语言程序设计第四次作业
  11. 【SketchUp插件】10款吊炸天的SU插件,拿走不谢!
  12. app指纹登录 java后端_Android应用实现指纹登录
  13. MBTI职业倾向测验
  14. 久处不厌,闲谈不烦。从不敷衍,绝不怠慢
  15. 怎样恢复计算机到桌面,电脑任务栏怎么还原到下面 电脑任务栏还原方法【图文】...
  16. 安卓识别身份证,自动提取身份证信息功能实现(附源码)
  17. java生成图章到word_JAVA不使用POI给Word文档添加水印
  18. c++内存管理1:primitives
  19. 用表格完成个人信息网页的设计 基本信息:姓名,学号,出生日期,手机号码,证件类型,证件号码,学校,学院,专业,学制,入学时间,个人证件图像兴趣爱好
  20. Java基础数据类型二进制转换

热门文章

  1. LeetCode之Remove Duplicates from Sorted Array II
  2. Eclipse之Android项目名有红感叹号的解决办法
  3. TCP握手/挥手的过程分析
  4. 看得懂的设计模式 享元模式python3 最基本(简单)实现
  5. k8s mysql数据同步_K8s——MySQL实现数据持久化
  6. python实验原理_Python实验报告八
  7. c语言十佳运动员有奖评选系统_2019年沃德十佳内饰解读
  8. python重构函数_Python代码重构
  9. 单身两年以上是什么体验?
  10. 爱思助手短信备份到安卓_爱思助手肿么将短信导入iphone