动态类型无处不在 | 第二部分 类型与操作 —— 第 6 章: 动态类型的插曲 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-大发黄金版app下载
当然,不需要真的画出带有圆圈和箭头的名称/对象图来使用python。然而,当开始学新知识时,如果像我们这里做的那样可以跟踪变量的引用结构,那么这个图有时会帮助理解不常见的情况。比如,如果当一个可变对象在程序中传递时,如果它意外改变,很可能你正在亲眼见证本章的一些主题。
而且,即使动态类型在目前看起来有点抽象,但最终仍可能关注它。因为在python中一切似乎都是通过赋值与引用来工作的,对此模型的基本理解在许多不同的场景都有用。将看到:在赋值语句,函数参数,for
循环变量,模块导入,类属性等等都是一样的。好消息是在python中只有一个赋值模型;一旦掌握了动态类型,将发现在语言的每一个地方都是一样的。
在最实用的层次上,动态类型意外着编写更少的代码。然而,同样重要的,动态类型也是python的多态(在第4章中引入的一个概念,在本书后面将再次复习)的基础。因为在python代码中不限制类型,所以动态类型是精确和高度灵活的。将看到:当使用得好时,动态类型——和它所暗示的多态——会生成随系统发展的自动适应新需求的代码。
“弱”引用
在python世界,可能有时会看到属于“弱引用”。这是一个有点高级的工具,但它和这里探索的引用模型有关,而且和is
操作符一样,如果不理解引用模型就不能真正的理解它。
简而言之,弱引用,被weakref
标准库模块实现,是一个对象引用,它不能单独阻止被引用对象被垃圾回收。如果对象的最后剩下的引用是弱引用,对象会被回收,它的弱引用会被自动删除(否则会被通知)。
举个例子,这(弱引用会被自动删除)在大对象的基于字典的缓存中是很有用的;否则,单是这个缓存的引用就会无限地把对象保持在内存中。然而,这真的只是引用模型的一个特殊情况的扩展。要获得更多细节,参考python的库手册。