黑马程序员技术交流社区
标题: 可变不可变类型的理解 [打印本页]
作者: hu222333 时间: 2019-10-28 23:35
标题: 可变不可变类型的理解
本帖最后由 hu222333 于 2019-10-28 23:40 编辑
可变不可变类型的学习总结
不可变类型个人理解就是在内存空间产生的数据,并且从生成到数据被清除,在内存空间储存的地址不发生改变的数据,字符串、整型、浮点型、元组;
这些类型除了元组外,都是些类型不同的数据,而元组有区别于它们的是一种容器。
当对w变量赋值后,两个变量都引用同一个地址,当删除一个变量,另一个变量引用的地址不发生变化,说明我们不能直接对元组进行删除操作,只能删除这个变量与其引用的地址值;
当把两个变量都删除了,我们再重复上述操作,发现新建的元组地址和原来的地址不一样,说明python在内存中重新在分配了一块空间用来重新存放元组。原来的元组无引用我们无法再访问了,一段时间后在底层垃圾清理机制中会被清除。
当以同样的方法对列表进行操作,列表也符合上述结果;但列表可以进行修改删除,通过对列表进行各种操作,列表的地址并不会发生改变;当在元组内加一个列表元素,对列表元素进行操作并不会改变元组的id。
通过各种验证发现,可变不可变类型对于数据来说是不可变的,只是引用发生了改变,在一次程序运行过程中并不会发生改变,从产生到消失都在内存空间的固定位置存放着,而对于容器来说,它只是一个储存变量名和地址信息的一块内存区域,我们可以改变最简单理解可变不可变就是,当其生成后能否对其进行修改,能修改的就是可变类型。
容器本身是不可变的,但它的储存地址的空间可以发生修改删除等操作,所有容器看作可变类型,而元组在python设定上让其的元素无法进行修改,但它所包含的元素如果是可变类型的容器它内部却可以发生地址的更改指向新的地址或者删除,并不影响这个包含可变容器的地址。
理解清除内存中数据是如何存储和修改对我们以后写代码会有很多帮助,上面的仅仅是这段时间学习,以及查阅相关信息做的学习理解。不知道理解的到不到位,有没有错误欢迎大家指正。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |