python变量 和 对象
python变量
在python中变量是地址(在c语言中就是指 指针),比如说,有一个变量m,那么在内存中有一块区域名字是m,m是内存的标志,在这个区域中存储的 内容是一个 指针,我理解这是一个常量。
因为变量是指针,所以在python中变量作为指针可以指向任意一种 对象。
python对象
在python中对象分为可变对象和不可变对象。可变对象是引用类型,不可变对象是值引用
- 可变对象有 列表,字典,集合
- 不可变对象类型 有 数值类型,字符串类型,元组类型
又把可变对象称为 对象引用对象,我认为就是在这些以对象名为标识符的内存中存放的不是数据,而是指针(对象引用)。
举个例子:
list = [ 'asdf',1,2]
- 在对象名list可以认为是一块内存的标志,一共三个元素,全部都是指针。第一个指针是 ‘asdf’ 这个字符串的地址。
- 第二个元素是数据1存放的地址。
- 第三个元素是数据2存放的地址。
那我可以这样认为,不可变对象是基本对象,可变对象是由基本对象构成的。可变对象被称为对象引用对象 是名副其实。
可变对象和不可变对象的性质
可变对象
a=100
b=100
在内存中先存一个100,然后在另一个名为变量 a 内存区存放a的地址。
然后又将100所在的地址,再给 变量b。
就是说 嗯… a指向对象100,b也指向 对象100。内存中只有一个对象100。
不可变对象
不可变对象的操作多是原地操作,增删改查 都是在原地。这个原地操作需要理解一下。
list = [ 'asdf',1,2]
上面我的理解是在对象名为 list 的内存中存放一些地址。原地操作指的是这个 名为 list
的内存块地址不会变,但是内存块中存放的指针,是会改变的。
list = [ 'asdf',1,2]
list[0]=123
上面的代码的运行结果是 list=[123,1,2]。
过程中,新开辟了一块空间存放数据123,然后把它的地址放在list对象的三个内存块中的第一个内存块。
综上,有了对可变对象和不可变对象的重新认识:
不可变对象是对象本身所在的地址下的内容 不容改变 ,只能重新 开辟空间。
可变对象:对象本身所在的地址下的内容是可以改变的。
我觉得 对象引用对象比不可变对象这个名字更合适。
以上是个人学习理解,有人看到有错误的请劳烦指出,我好修正我的理解。有个图就更好理解了。
加上两个图片,图是我从哪里搞来的忘了。。。不好意西。。。