变量内存图

205 阅读2分钟

不可变变量

图1

变量内存图1.jpg

先看 name = “悟空”

变量

变量在图中左侧。

“101”为变量的地址

“name”为变量地址的命名

变量里存的”901“是数据的地址

“蓝色箭头”可以看成是指针的指向内容

数据地址

数据在图的右侧

“901”是数据的内存的地址

“悟空”是数据的内容

第二行 name = “八戒”

因为变量”name“已经创建过了(在第一行里),所以不动。

”八戒“在数据中并没有,所以创建了新数据,数据地址为”902“,内容是”八戒“

”=“吧之前指向”悟空“数据的指针删掉,并重新指向”八戒“的数据,并吧变量”name“里存的悟空”901“的地址改成数据”八戒“的数据地址。改为”902“

第三行 other = name

创建一个变量名为other的变量地址,并指向name的数据地址“902”,内容是“八戒“

第四行 other = ”老朱“

和第二行逻辑一样,只不过是“other”变量指向了新数据“903”,所以变量里存的数据地址改成了“903”。

第五行 print(name)

只打印了变量name的数据。变量other是一个新的变量,2个变量互不影响。所以只看name指向的数据为“八戒“

结论

另外从图可以看出str是一个不可变的变量,每次重新赋值,不会改变原有的数据内容。会重新创建新的数据地址。并指向新的数据地址

list变量(可变变量)

列表增加,插入元素时内存图 列表内存图3.jpg

列表删除元素时内存图 列表内存图4.jpg

字典

通过哈希表 定义key地址,查找内容块 字典内存图.jpg

小结 - 容器

  1. 种类与特征
  • 字符串:存储字符编码,不可变,序列
  • 列表:存储变量,可变,序列
  • 元组:存储变量,不可变,序列
  • 字典:存储键值对,可变,散列
  • 集合:存储键,可变,散列
  1. 可变与不可变

为什么有可变类型,还需要有不可变类型?(潜台词:为什么有功能强大的,还有用功能弱化的.)

  • 可变:预留空间+自动扩容
  • 优点:操作方便
  • 缺点:占用内存较多
  • 不可变:按需分配
  • 优点:占用内存较少
  • 缺点:操作不方便
  1. 序列与散列
  • 序列
  • 优点:有顺序,操作灵活(索引切片)
  • 缺点:定位单个元素慢
  • 散列
  • 优点:定位单个元素快(key),代码可读性更高(key名可自定义)
  • 缺点:无顺序,操作不灵活
  1. 适用性:
  • 存储单一维度数据使用列表
  • 存储多个维度数据使用字典