可变类型与不可变类型
作者:互联网
可变类型:列表就是典型
可变类型简而言之就是本身在地址不变的情况下可以改变内部所储存的数据。在数据更新的过程中不会占用多余的内存空间,也不会返回新的文件。
list_name = ['oliver', 'age', 'hobby', '16']
print(id(list_name)) # 生成列表的第一个元素地址
list_name[0] = 'barkie' # 修改第一个元素的数据为'barkie'
print(id(list_name)) # 生成列表的第一个元素地址
print(list_name)
![](https://www.icode9.com/i/l/?n=22&i=blog/2760932/202203/2760932-20220309213803736-856156457.png)
可以注意下这里列表内的元素已经发生更改,但是列表的地址并没有改变
list_name = ['oliver', 'age', 'hobby', '16']
list_name_add = ['kevin', 'justin', 'biber', 'faker']
print(list_name.extend(list_name_add)) # 在原有的列表里进行更改,并没有生成新文件,所以输出这个结果应该为空,并没有返回值
print(list_name)
![](https://www.icode9.com/i/l/?n=22&i=blog/2760932/202203/2760932-20220309214225315-934016269.png)
这里直接输出合并列表那个命令,结果为None,也就表示并没有获得返回值,反而访问原变量名获得更改后的返回值
可变类型变量名在更改数据时的指向流程
![](https://www.icode9.com/i/l/?n=22&i=blog/2760932/202203/2760932-20220309220244426-1724353125.png)
在对可变类型数据进行更改时,变量名的指向并不会改变,而是在数据内部进行更改,数据并没有离开储存它的区域,有没有产生新的文件,只是根据对数据的更改加了索引值或者删除了索引值
不可变类型:字符串是典型
类似于可变类型,不可变类型就是改变内部存储数据的时候地址一定会改变。在数据更新的过程中会产生新文件,占用更多的内存空间。
str_name = '###oliver###'
print(str_name.strip('#')) # 结果为oliver
print(str_name) # 结果为###oliver###
# 也就是在字符串中的去除指定字符的操作会产生新文件,不会对原字符串进行更改
![](https://www.icode9.com/i/l/?n=22&i=blog/2760932/202203/2760932-20220309221024412-207320500.png)
注:如果对不可变类型数据进行处理后,还要用原来变量名的,那么就必须切断变量名原来的指向,指向新产生文件的路径
str_name = '###oliver###'
print(id(str_name)) # 查看变量名指向的地址
str_name = str_name.strip('#')
print(id(str_name)) # 查看变量名指向的地址
注:变量名地址已经发生更改,即产生了新文件
![](https://www.icode9.com/i/l/?n=22&i=blog/2760932/202203/2760932-20220309221426538-730222591.png)
不可变类型变量名在更改数据时的指向流程
![](https://www.icode9.com/i/l/?n=22&i=blog/2760932/202203/2760932-20220309221734739-1312533376.png)
在对原数据进行更改操作时,原来的数据不变,会生成一个新的数据,即下方红箭头指向的数据,原来的指向也会断开。
结束
![](https://www.icode9.com/i/l/?n=22&i=blog/2760932/202203/2760932-20220309222439849-1922417948.jpg)
标签:name,更改,不可,list,print,str,可变,类型,变量名 来源: https://www.cnblogs.com/Oliver-Chance/p/15987399.html