首先什么是对象
Python中一切都是对象,而对象中包含三部分的信息:
身份:每一个对象都有唯一一个身份标识自己,使用内建函数id 可以看到这个标识的具体值,也就是变量的地址。
类型:对象的类型可以决定对象保存什么样的值,可以进行什么样的操作。以及遵守什么样的规则,实际上用内建函数type可以查看对象的类型。
值:表示对象具体保存的内容,有些对象的值可以修改,有些对象的值不可以修改,这个称为对象的可变性
Python中可以用id 这个内建函数查看变量的地址。
解释:给a重新赋值成200,相当于创建了一个200这样的对象,然后将变量名a 重新绑定到了200这个对象上.将a 赋值给b ,其实相当于又创建了一个变量名b ,并将b这个名字与200绑定在了一起。像创建a,b这样的变量名,其实只是一个对象的别名,后者叫对象的引用。
其实,按照我们一般的理解,也就是C的理解,a=2,相当于先创建了一个变量名a,a就是一个篮子(给a分配了内存空间),然后把数字2装在了a这个篮子中,但是Python中完全不是这样的。它其实是下面这样的
1.我们在解释器中输入a=2,首先有一个integer class被唤醒(找到整形对象的图纸)。
2.根据Integer class 这个图纸,在内存中开辟一段空间(得到对象ID),并填充入对象的ID和类型和值。相当于房子已经建好,装饰完毕,家具齐全。
3.万事俱备,只欠东风,如果想住进去,还要有房子的钥匙。这个时候,变量名其实就是我们的钥匙。
如果值是相等的,那么之开辟一次空间。
总结:Python中的变量名,只有一个访问对象的钥匙,多个不同变量,完全可以访问相同的对象,因此我们把这种对象名叫引用。
思考:
1.空间考虑:比如一个数字2,在Python中只有这一个数字2,而C/C++中得有很多。
2.时间考虑:比如a=b.这样的赋值,只是修改了一下标签的位置,不需要对对象进行深拷贝。