背景:
探寻 python 的数据类型是否可变, 也可以更好的理解 python 对内存的使用情况.
可变与不可变定义
可变数据类型: 在 python 中定义一个变量, 当变量值被修改后, 内存地址未变更 (对象未变更), 则将该数据定义为可变数据类型.
可不变数据类型: 当变量数值被修改后, 变量的内存地址发生变更 (创建了新对象), 则认为是不可变数据类型.
针对 python 数据类型进行测试:
数字:
- >>> a = 111
- >>> id(a)
- 1549733776
- >>> a = 222
- >>> id(a)
- 1549737328
结论: 数字类型的变量值变更后内存地址发生改变
字符串:
- >>> a = "abcdefg"
- >>> id(a)
- 2363386268560
- >>> a = "abcdefgggggg"
- >>> id(a)
- 2363386295024
结论: 字符串类型的变量值变更后内存地址发生改变
元组:
- >>> a = ('aa','bb','cc')
- >>> id(a)
- 2363384788456
- >>> a = ('aa','bb','dd')
- >>> id(a)
- 2363384789896
结论: 元组类型的变量值改变后内存地址发生变化
列表:
- >>> a = ['aa','bb','cc']
- >>> id(a)
- 2363386243016
- >>> a[0] = 11
- >>> a
- [11, 'bb', 'cc']
- >>> id(a)
- 2363386243016
结论: 列表类型的变量值发生变化后内存地址未变更
字典
- >>> a = {'name':'zhangsan','age':'33'}
- >>> id(a)
- 2363384325384
- >>> a['name'] = 'lisi'
- >>> a
- {'name': 'lisi', 'age': '33'}
- >>> id(a)
- 2363384325384
结论: 字典类型的变量值发生变化后内存地址未变更
汇总: 当变量值为数字, 字符串, 元组数据类型时, 数值发生变化后内存地址变更, 以为着创建了一个新对象. 因此不可变数据类型为: 数字, 字符串, 元组.
当变量值为列表, 字典数据类型时, 数值发生变化后内存地址未变更, 以为着变更后依然是在同一个对象, 因此可变数据类型为: 列表, 字典.
来源: http://www.bubuko.com/infodetail-2637289.html