数据类型总结

数据类型总结

按存储空间的占用分-从低到高(了解)

  1. 数字
  2. 字符串
  3. 集合:无序,即无序存索引相关信息
  4. 元组:有序,需要存索引相关信息,不可变
  5. 列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
  6. 字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

按存值个数区分(掌握)

存值个数 数据类型
单个值 数字,字符串
多个值(容器) 列表,元组,字典,集合

按可变不可变区分(掌握)

可变or不可变 数据类型
可变 列表,字典,集合
不可变 数字,字符串,元组

有序无序区分(掌握)

有序or无序 数据类型
有序(可按索引取值) 字符串,列表,元组
无序 字典,集合

按访问类型区分(了解)

访问类型 数据类型
直接访问 数字
顺序访问(序列类型) 字符串,列表,元组
key值访问(映射类型) 字典

浅拷贝和深拷贝

数据类型总结

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用

针对该列表alist=[1,2,3,["a","b"]]一般有三种方法,分别为:拷贝(赋值)、浅拷贝、深拷贝

拷贝(赋值)

直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变

alist=[1,2,3,['a','b']]
b = alist
print(b)
alist.append(5)
print(alist)
print(b)


[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b'], 5]

浅拷贝

copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

>>> import copy

>>> c=copy.copy(alist)
>>> print(alist)
>>> print(c)
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
>>> alist.append(5)
>>> print(alist)
[1, 2, 3, ['a', 'b'], 5]
>>> print(c)
[1, 2, 3, ['a', 'b']]

>>> alist[3]
['a', 'b']
>>> alist[3].append('cccc')
>>> print(alist)
[1, 2, 3, ['a', 'b', 'cccc'], 5]
>>> print(c)
[1, 2, 3, ['a', 'b', 'cccc']]  # 里面的子对象被改变了

深拷贝

深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

>>> import copy

>>> d=copy.deepcopy(alist)
>>> print alist;print d
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]  # 始终没有改变
>>> alist.append(5)
>>> print(alist)
[1, 2, 3, ['a', 'b'], 5]
>>> print(d)
[1, 2, 3, ['a', 'b']]  # 始终没有改变
>>> alist[3]
['a', 'b']
>>> alist[3].append("ccccc")
>>> print(alist)
[1, 2, 3, ['a', 'b', 'ccccc'], 5]
>>> print(d)
[1, 2, 3, ['a', 'b']]  # 始终没有改变
上一篇:PSTAT 160A PYTHON HOMEWORK


下一篇:算法试题 - 找出字符流中第一个不重复的元素