python 面向对象
其实大家在刚接触python的时候,听到最多的应该就是“万物皆对象”。而对于对象,大多数都是用 class 去做这方面的演示。当然这肯定是没有错的,但可能会让大家产生 obj = class 的概念;后面和大家一起学习python的基础类型(int、str、list、set、tuple、dict)的底层实现。
python 基础类型
可变对象 & 不可变对象
像大家一开始接触python的时候,不可避免接触到两个概念:“不可变对象”、“可变对象”。
那什么是可变对象,什么是不可变对象?
网上大多是用tuple和list去做这方面的解释。例如在创建某个list对象后,可以更改其内部的值而id不变;创建出来的元组对象无法在不更改id的情况下,更改其内部的不可变参数(注意,这里说的是不可变参数)。
我们可以对比一下list和tuple的属性:
可以看到,只是python在自己的层面,没有向tuple提供类似于list.append的方法;如果去重写tuple的类方法,就可以将其变为一个可变对象。其实list和tuple在C里都是使用数组实现的。
那为什么python需要设置可变对象和不可变对象?
int与str不多赘述,底层就决定了不可变对象的实质。