1. 基本数据类型
基本数据类型都是可变数据类型
int -- 整数类型
可以表示任意大小的整数,它可以使用非常大的整数而不会溢出
num = 10 # 定义整数类型
print(num)
print(type(num)) # type() 返回数据类型
int(num) # 将变量转换为int类型
# 输出结果
10
<class 'int'>
float -- 浮点数类型
通常情况下,浮点数占用64位的存储空间
fl = 3.14
print(fl)
print(type(fl))
# 输出结果
3.14
<class 'float'>
bool -- 布尔类型
bool类型只有两种取值:True和False,True默认值为1,False默认值为0。
除False、0、0.0、空序列(如空列表[],空字典{}...)、None之外都为True
b1 = True # True 默认代表 1
b2 = False # False 默认代表 0
print(b1)
print(type(b1))
print(b2)
print(type(b2))
print(b1 + b2)
# 输出结果
True
<class 'bool'>
False
<class 'bool'>
1
str -- 字符串类型
使用单引号'',或双引号""或三引号''' '''、""" """引起来的内容称之为字符串。
字符串可以通过下标取值,如s[0] -> 取出字符串s下标为0的字符
字符串可以通过"+"的方式拼接
str1 = "abcd123#%%&啊啊啊"
print(str1)
print(len(str1)) # 输出字符串的长度
print(type(str1))
# 输出结果
abcd123#%%&啊啊啊
14
<class 'str'>
切片
字符串可以通过切片的方式取出子字符串
s[0, 4] -> 左闭右开,取出从左下标到右下标之前的部分字符串
s[0, 4, 2] -> 表示每次取离当前元素x个下标的字符,如s="abcdefg",此时s[0, 4, 2]的取值为"ac"
s[-4, -1] -> 负数表示从后往前的下标,-1表示最后一个元素,-2是倒数第二个元素,以此类推,其使用方式与正数下标同理
2. 可变数据类型和不可变数据类型
可变数据类型
可变数据类型是指:当元素值发生改变时,其内存地址值不发生改变的数据类型
可变数据类型包括:
列表(list)、字典(dict)、集合(set)
不可变数据类型
不可变类型是指:当元素值发生改变,其内存地址值也发生改变的数据类型
不可变数据类型包括:
基本数据类型
整数类型(int)、浮点数类型(float)、布尔类型(bool)、字符串类型(str)
和元组(tuple)
3. 容器类型的数据类型
list -- 列表
列表可以增删改查
列表里面可以存储任意数据类型
可以通过下标和切片的方式获取或访问列表的内容
列表中,append()
用于向列表末尾添加元素,insert()
用于在指定位置插入一个元素,remove()
用于删除列表中指定的元素等
# 列表 -- 可变数据类型
list1 = [1, 2, 3, 4, 5, 'a', 'b', 'c']
# 查询
print(len(list1)) # 长度
print(list1[3]) # 下标取值
print(list1[-1])
print(list1[:]) # 切片
print(list1[::-1]) # -1为步长可反转
# 修改
list1 = [1, 2, 3, 4, 5, 'a', 'b', 'c']
list1[6] = 'h'
print(list1)
# 删除
list1 = [1, 2, 3, 4, 5, 1, 'a', 'b', 'c']
# 1.pop删除 -- 下标
list1.pop() # 默认删除最后一个元素,也可以指定下标
print(list1)
list1.pop(4)
print(list1)
# 2.remove删除 -- 指定一个具体元素 从前往后
list1.remove("a")
list1.remove(1)
print(list1)
# 3.del关键字删除
del list1[2]
print(list1)
# 4.clear 清空列表
list1.clear()
print(list1)
# 新增
list1 = [1, 2, 3, 4, 5, 1, 'a', 'b', 'c']
list1.append("d")
print(list1)
list1.append(['l', 'o', 'l', 'k']) # 可以添加容器类型数据
print(list1)
list1.extend(['l', 'o', 'l']) # 将容器拆分添加进来
print(list1)
# 嵌套提取列表的值
print(list1[-4][-1])
tuple -- 元组
元组可以查询,但是不能增删改
元组可以存放任意数据类型
# 元组 -- 不可变数据类型
t1 = 1, 2, 3, 4, 5, 67, 89, 90, 5, 4, 3, 2, 1
# 查询
print(t1[::-1])
print(t1.count(1)) # 获取该元素的出现次数
print(t1.index(1)) # 获取该元素从左往右第一次出现的下标
t2 = () # 创建空元组
print(type(t2))
dict -- 字典
字典的key可以存放不可变数据类型(int、float、str、bool、tuple),不能存放可变数据类型
字典的value可以存放任意数据类型
字典可以增删改查
# 字典 -- 可变的数据结构
# 查询
dict1 = {'name': 'litie', 'age': 20, 'sex': '男'}
print(dict1['name']) # 通过key获取value值
print(dict1['age'])
print(dict1['sex'])
print(dict1.keys()) # 获取所有的key
print(dict1.values()) # 获取所有的value
print(dict1.items()) # 获取所有的键值对
# 快速创建字典
dict2 = dict(a=1, b=2, c=3)
print(dict2)
print(type(dict2))
# 增加数据 update
dict2.update({'d': 4})
print(dict2)
# 如果key已存在,会进行覆盖
dict2.update({'d': 44, 'e': 55, 'f': 66})
print(dict2)
# setdefault 新增但会保留原数据不会覆盖
dict2.setdefault('a', 666)
dict2.setdefault('k', 777)
print(dict2)
# 修改
dict2 = dict(a=1, b=2, c=3, d=44, e=55, f=66)
print(dict2)
dict2['a'] = 666
print(dict2)
# 删除
dict2 = dict(a=1, b=2, c=3, d=44, e=55, f=66)
print(dict2)
dict2.pop('a')
print(dict2)
# 清空
dict2.clear()
print(dict2)
set -- 集合
集合相当于字典的key
可以存放不可变数据类型(int、float、str、bool、tuple),不能存放可变数据类型
# 集合 -- 可变数据结构,无法通过下标查询,无法修改
# 创建空集合
set1 = set()
print(type(set1))
# 新增,会自动去重,所以已有数据的新增无效
set1 = {1, 2, 3, 4, 5, 6, 7, 3, 5, 2, 6, 1, 7, 3, 6, 2, 4, 3, 7}
print(set1)
print(len(set1))
# add 新增
set1.add(9)
print(set1)
# update 新增其他容器类型数据,会拆分
set1.update([11, 22, 33])
print(set1)
# 删除 remove,如果没有该元素会报错
set1 = {1, 2, 3, 4, 5, 6, 7, 3, 5, 2, 6, 1, 7, 3, 6, 2, 4, 3, 7}
set1.remove(3)
print(set1)
列表、元组、集合互相转换
列表、元组、集合之间可以进行互相转换
# 列表、元组、集合互相转换
# 集合转列表
set1 = {1, 2, 3, 4, 5, 6, 7, 3, 5, 2, 6, 1, 7, 3, 6, 2, 4, 3, 7}
list1 = list(set1)
print(list1)
print(type(list1))
# 元组转列表
t1 = (1, 2, 3, 4, 5, 6)
list2 = list(t1)
print(list2)
print(type(list2))
4. 深浅拷贝
浅拷贝
浅拷贝本质上就是让一个变量指向另一个变量的内存地址,如果原数据发生改变,则两个变量所代表的数据也会随之改变。
from copy import copy
str1 = "这是一个字符串"
str2 = copy(str1)
print(id(str1))
print(id(str2))
# 输出结果
2693717940560
2693717940560
深拷贝
深拷贝不是单纯的将地址拷贝过来,而是重新开辟空间,将原数据的内容完全拷贝一份。如果原数据的内部存在引用,该引用所对应的数据也会进行拷贝。
总的来说就是拷贝出一份全新的,但内容与原数据完全一样的数据
str1 = "这是一个字符串"
str2 = deepcopy(str1)
str1 = str1 + 'aaa'
print(str1)
print(id(str1))
print(str2)
print(id(str2))
# 输出结果
这是一个字符串aaa
2233431715216
这是一个字符串
2233428400464