值类型与引用类型
值类型(元祖、字符串、整型、浮点型、复数、布尔型)~值发生改变,内存地址也发生了改变
引用类型(字典、列表、集合)~值发生改变,内存地址未发生改变
变量与数据类型
变量里存储的是数据(值对象)对应的内存地址
通过内存地址访问值对象这种方式叫引用
赋值语句实际上是在修改变量的引用
使用id(变量)可查看变量存的地址
序列
可以使用for循环遍历得出下一个值
序列分为有序序列和无序序列
有序序列可以借助索引访问或删除,无序序列不可以
支持成员运算符in 、not in判断,返回结果为True/False
哈希
通过hash函数获取到对象的特征码,返回的是一个整型
hash是一种算法
可哈希的对象一定是不可变数据类型
可变与不可变数据类型
可变数据类型:数据值发生改变内存地址不变(列表、字典、集合),改变值借用的是方法而非赋值语句
不可变数据类型: 数据值发生改变内存地址变化(字符串、整型、浮点数、布尔型、元祖)
数据类型划分
整型
整数,int类型,可参与运算符计算
浮点型
小数,float类型,可参与运算符计算
字符串
字符类型,用单/双/三引号成对出现方式声明
- 有序序列
- 可以切片得到返回新的一个字符串对象
- 可以使用+号连接两个字符串形成新的一个字符串对象
- 将数据类型变成字符串后可以使用正则查找替换(replace)字符串
- 字符串对象拥有丰富的方法库(find(str)、count(str)、index(str)、replace(old、new))
- 元素可重复
格式化字符(字符串一部分的内容是变量指向的值)的方式
1.使用%d(变量是整型) %s(变量可以是任意类型) %f (变量是浮点型)占位
2.使用"…{索引:可传可不传}…“.format()
3.使用f”…{变量名/表达式}…"
布尔型
True/False, 0/None/空字符串/空元组/空集合/空列表/空字典/0.0为假,其它均为真
·用处
用在循环/条件判断(if /while)
列表
list类型,空列表定义(list()/[])
- 有序序列
- 支持增(append(x),extend(序列),insert(index,value))删(del list[index],remove(value),pop(index:默认弹出最后一个元素)) 改(list[index]=value)查(list[index])
- 列表支持反转(使用reverse方法或切片倒序)
- 支持切片
- 元素可重复
元组
tuple类型,空元组定义tuple/(),如果元组只有一个数据用(value,)
备注:t1=1,2这种用逗号分隔的形式也是元组定义,例如return value1,value2
- 有序序列
- 不支持增删改(不可变类型)
集合
set类型,空集合定义,空集合定义set(), 可认为只存储了key值
- 无序序列
- 支持增(add(value),update(字符串)~将字符串拆分单个追加到集合中)删(remove(value)) 查(只能访问全部元素)
- 集合支持交(&)并(|)差(-)
字典
dict类型,空字典定义{},定义{key:value}, 通过key查找value,速度快
- key无序
- 可以通过for循环遍历key(dict.keys()),遍历vlaue(dict.values()),遍历key与value(dict.items())
- 修改key对应的值(dict[key]=value),删除key(dict.pop(key),del dict[key]),添加dict[key]=value
- key是不可变类型(可哈希)
浅拷贝与深拷贝
针对的是列表、字典、集合可变数据类型
浅拷贝···拷贝的是对象的引用(拷贝后原始对象和现有对象操作的是同一块内存地址,所以两个的操作都会改变对象引用的值)
深拷贝···找到对象的引用对应的值,然后在内存开辟新的空间存放这些值。原对象和现对象互不影响
浅复制
对象.copy(),一级对象是深拷贝,二级对象浅拷贝