一、类型转换
int ():转换为一个整数,只能转换由纯数字组成的字符串
float->int : 会去掉小数点及后面的阿数值,只保留整数部分
str-> int : 如果字符串中有数字和正负号(+-)以外的字符就会报错(+-写在前面表示正负号,不可以写后面)
# 用户输入年龄,判断成年 age = int(input("请输入年龄:")) # input默认输入字符串, 强制转换为整型 if age >= 18: print("成年") else: print("未成年")
float () : 转换为一个小数
int -> float : 整型转换为浮点型,会自动添加以为小数 5----> 5.0
str -> float: 如果字符串中有正负号、数字和小数点以外的字符,则不支持转换
str () : 转换为字符串,任何类型都可以转换成字符串类型
float-> str : 会取出末位为0 的小数部分 -1.000 ---“ -1.0” 2.00 ---"2.0" 2.1200----"2.12"
list -> str : 输出形式和列表相同,但是已经是字符串类型了
eval () : 用来执行一个字符串表达式,并返回表达式的值
eval("10+10") -----> 20 执行运算,并返回运算值
eval("10"+"10")----> 1010
eval(10+"20") ----> 报错,整型和字符串不可以相加
eval("[[1,2],[3,4],[5,6]]") -----> [[1,2],[3,4],[5,6]]**可以实现list、dict、tuple和str之间的转换**
eval() 很强大。但不够安全,容易恶意修改数据
list () : 将可迭代对象转换成列表
支持转换为list的类型:str、tuple、dict、set
str ->list : list("abc") ---->['a', 'b', 'c']
tuple ->list : list(("a","b","c")) ----> ['a', 'b', 'c']
dict->list : list({"name": "小陈","age": 18}) ---->['name', 'age'] 字典转换成列表,会取键名作为列表的值
set ->list : list({"a","b","c"}) ---->['b', 'a', 'c'] 由于集合是无序的,生成列表的元素也是无序的。如果重复,先去重,再转换。
tuple () : 转换成元组
tuple("abc") # 字符串转换成元组
tuple([1,2,3,4,5])# 列表转换成元组
tuple({"name": "小陈","age": 18}) # 字典转换成元组
tuple({1,2,3,4,5})## 集合转换成元组
set () : 转换成集合
set("abc")# 字符串转换成集合
set([1,2,3,4,5])# 列表转换成集合
set({"name": "小陈","age": 18})# 字典转换成集合
set(tuple([1,2,3,4,5])) # 元组转换成集合
dict (): 转换成字典
dict([("name", "小陈"),("age", 18)])# 列表转换成字典
二、深浅拷贝
赋值:
a =[1,2,3]
b=a
等于完全共享资源,一个值的改变会完全被另一个值共享
变量内存地址相同
浅拷贝:
数据半共享
会创建新的对象,拷贝第一层的数据,嵌套层会指向原来的内存地址
需要导入copy模块 格式: b=copy.copy(a)
两个变量的内存地址不一样,说明不是一个对象了 --查看内存地址 id(a) id(b)
外层的内存地址不同,但是内层的内存地址是相同的
优点:拷贝速度比较快、占用空间少、拷贝效率高
import copy a =[1,2,3,[4,5]] b=copy.copy( a) a.append(6) # 往列表添加元素 a[3].append(7) # 往嵌套列表添加元素 print(a,id(a),id(a[3]),"\n",b,id(b),id(b[3])) #a----- [1, 2, 3, [4, 5, 7], 6] 1540123463616 1540123462976 #b----- [1, 2, 3, [4, 5, 7]] 1540123470656 1540123462976深拷贝:
数据完全不共享
外层的对象和内层的元素都拷贝了一遍
需要导入copy模块 格式:b = copy.deepcopy(a)
深拷贝数据变化只影响自己本身,跟原来的对象没有关联
import copy a =[1,2,3,[4,5]] b=copy.deepcopy( a) a.append(6) # 往列表添加元素 a[3].append(7) # 往嵌套列表添加元素 print(a,id(a),id(a[3]),"\n",b,id(b),id(b[3])) # [1, 2, 3, [4, 5, 7], 6] 1736682377152 173668237651 # [1, 2, 3, [4, 5]] 1736682384192 1736682356800
三、可变对象
含义:
存储空间保存的数据允许被修改,这种数据就是可变类型
变量对应的值可以修改,但是内存地址不会发生改变 (可使用id()验证,内存地址)
常见类型:
列表 list
字典 dict
集合 set
注意:深浅拷贝只针对可变对象
四、不可变对象
含义:
存储空间保存的数据不允许被修改,这种数据就是不可变类型
变量对应的值不能被修改,如果修改就会生成一个新的值从而分配新的内存空间
内存地址不一样: 修改值就会生成新的值,重新赋值给变量
常见类型:
数值类型:int、bool、float、complex
字符串: str
元组:tuple(元组不支持新增删除和修改操作,只能重新定义,因此,内存地址就会改变)