1. 基础数据类型

Python中数据类型如下:

Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典)

在工程应用中使用到的变量均是由上述一种或几种类型组合而成的。这些数据类型又可以分为可变与不可变对象,区分的关键词:内存

  • 不可变对象,该对象所指向的内存中的值不能被改变

当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。

  • 可变对象,该对象所指向的内存中的值可以被改变

变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变
其中数值类型(int float)、字符串str、元组tuple都是不可变类型。而列表list、字典dict、集合set是可变类型。示例如下:

  1. >>> n = 123
  2. >>> id(n)
  3. 140729224586080
  4. >>> n = 234
  5. >>> id(n)
  6. 140729224589632
  7. >>> lst = [1, 2, 3]
  8. >>> id(lst)
  9. 1599867652168
  10. >>> lst += [4]
  11. >>> id(lst)
  12. 1599867652168

可以看出改变整数 n 的值之后,其指向的内存地址发生了变化,而向列表 lst 内添加元素之后,其指向的内存并没有发生变化。

2. 列表及其内部实现

Python里面的列表类名是 list,是动态的指针数组,由三部分组成:变量名称—list对象(结构性数据+指针数组)—list内容
但是它与传统意义上的单链表、双链表有着极大的不同之处。具体表现如下:

TBC
**

3. set和dict

Hash,一般翻译做“散列”,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。【不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值】
  dict与set实现原理是一样的,都是将实际的值放到list中。唯一不同的在于hash函数操作的对象,对于dict,hash函数操作的是其key,而对于set是直接操作的它的元素,假设操作内容为x,其作为因变量,放入hash函数,通过运算后取list的余数,转化为一个list的下标,此下标位置对于set而言用来放其本身,而对于dict则是创建了两个list,一个list该下表放此key,另一个list中该下标方对应的value。

  其中,我们把实现set的方式叫做Hash Set,实现dict的方式叫做Hash Map/Table(注:map指的就是通过key来寻找value的过程)
TBC
**

引用:
[1]. https://www.runoob.com/python3/python3-data-type.html
[2]. https://www.cnblogs.com/hellcat/p/8795841.html
[3]. https://mp.weixin.qq.com/s/IkFak4iYYqW7u61P7eu22g
[4]. python 下的数据结构与算法—-8:哈希一下【dict与set的实现】