_概述
    Python 是弱类型动态解释型的面向对象高级语言,其具备面向对象的三大特点:封装、继承、多态。Python 代码运行时,其有一个编译过程,通过
    解释器(而非编译器)生成 .pyc 字节码文件(为二进制文件),用于给解释器翻译成计算机可识别的指令。
    弱类型与动态是指其根据变量的“值”,自动的识别其数据类型。如 a=1,则(解释器)自动知道其为数字整型;a=’1’,则为字符串类型。
    虽然 Python 为弱类型语言,但也可以进行类型转换。其他特点就不在此赘述。

    数据类型
    关于 Python 的数据类型,可以大体分为 基本类型 与 容器 两类。
    基本类型包括:数字型(int、float、complex)、布尔型(0、1、空值、True、False)
    容器包括:序列(string、list、tuple)、映射(dict)、集(set)。在 Python 中,队列和栈,都是 list(“列表”)的延伸,这点不同于 Java 语言。

    关于对象与类型
    在 Python 的哲学世界中,秉承了一切皆对象的理念(极个别可能除外),最终全部继承于元对象 Object。Python 的空对象用None表示。
    另外,由于 Python 引入了鸭子类型的理念,所以在 Python 中使用设计模式几乎是极少的(比如观察者[发布-订阅]模式),也较少用到继承或抽象接口等。

    关于 Python 的优缺
    千人千面。例如语法简洁、库类丰富,即插即用等,同时它是弱类型语言、编译解释型语言,由于Python 的GIL(全局解释性锁)导致其性能上不如 Java 更不如 C++。因为多继承和”鸭子类型”而使得过于灵活,异常提示不够友好等等。
    Python往往被当做胶水语言,用于脚本执行、测试、运维、AI 领域等,也有作为工程产品(如豆瓣早期就是用的Python)_


    书籍阅读 《Python 基础教程第 3 版》 《Python CookBook》 《流畅的 Python》 《精通Python设计模式》 《Flask Web开发》

    关于鸭子类型的说明示例
    https://techiehours.com/python/python-duck-typing/

    可散列(hashable)
    一个可散列的对象必须满足以下要求

    1. 支持 hash() 函数,并且通过 hash() 方法所得到的散列值是不变的
    2. 支持通过 eq() 方法来检测相等性。
    3. 若 a == b 为真,则 hash(a) == hash(b) 也为真

    所有由用户自定义的对象默认都是可散列的,因为它们的散列值由id() 来获取,而且它们都是不相等的。如果你实现了一个类的 eq 方法,并且希望它是可散列的,那么它一定要有个恰当的 hash 方法,保证在 a== b 为真的情况下 hash(a) == hash(b) 也必定为真。否则就会破坏恒定的散列表算法,导致由这些对象所组成的字典和集合完全失去可靠性,这个后果是非常可怕的。另一方面,如果一个含有自定义的 eq 依赖的类处于可变的状态,那就不要在这个类中实现 hash 方法,因为它的实例是不可散列的。