Python的可变与不可变数据类型 作者:马育民 • 2018-06-28 23:43 • 阅读:10156 ### 不可变数据类型 当变量的值发生变化,地址也会改变 **本质:**是变量的 **引用** 指向 **新的内存地址** **类似:**户口本,结婚后,从原户口本迁出,成立新户口本,地址当然改变 可以作为字典的key ### 可变数据类型 当变量的值发生变化,地址不变 **本质:**当变量的值发生变化(即对变量进行append、+=等操作后),只是改变了变量的值,变量的 **引用** **没有** 指向 **新的内存地址** **类似:**班级学生名单,正常转入、转出学生,班级地址、名称不需要改变 ### 获取内存地址 通过函数 `id()` 获得变量指向的内存地址 ``` i=1 print(id(i)) i=2 print(id(i)) ``` ### 练习1 ``` s='hello' s2='hello' print(id(s)) print(id(s2)) ``` 答案:内存地址相同,因为python做了优化,当变量的引用指向的字符串相同时,其实是指向同一个内存地址 ### 练习2 ``` l=['hello'] l2=['hello'] print(id(l)) print(id(l2)) ``` 答案:l和l2的地址不同,因为list是可变数据类型,所以必须分配两个地址 原文出处:http://www.malaoshi.top/show_1EF1PjgXj0uw.html