Python类型转换,深浅拷贝
1 类型转换
1.1 int()
转换成一个整数,只能转换由纯数字组成的字符串
如果字符串中有数字和正负号以外的字符就会报错,正负(+ -)号只能在数字前面,在其余位置会被当成加减号,会报错
1.2 float()
将整型转换成一个小数或由纯数字组成的字符串转换成浮点型
整型转换为浮点型会在末尾添加一位数
由纯数字组成的字符串,如果存在小数点末尾不会添加一位数,反之则添加一位为零的数
1.3 str()
转换为字符串类型,任意类型都可以转换为字符串类型
整型转换为字符串类型
浮点型转换为字符串类型,末位为零的部分会去除
1.4 eval()
用法1:
动态执行字符串表达式:eval()能够解析字符串形式的Python代码,例如:eval("1"+"2"),返回的结果就是3,如果没有eval的话结果就会是12
用法2:
数据类型转换:可将字符串转换为Python对象,例如
字符串转化为列表:
字符串转化为字典:
字符串转化为元组:
1.5 list()
将可迭代对象转换为列表,可迭代对象就是能够被for循环遍历取值的,常见的可迭代对象有列表(list)、元组(tuple)、字典(dict)、集合(set)和字符串(str)
字符串转换为列表:
元组转换为列表:
字典转换为列表:
字典转换为列表,取键名作为列表的值
2 深浅拷贝
2.1 赋值
li = [1,2,3,4]
li1 = li #将li赋值给li1
print(li,li1)
li.append(2) #li新增元素
print(li,li1)
当我们执行上述代码就会发现,li新增元素会导致li1的变化,由此得出结论:赋值是完全共享资源,一个值的变化会导致另一个也跟着变化,并且两个值的内存地址也是一样的
对于自身可变,或包含可变项的集合,有时要生成副本用于改变操作,而不必改变原始对象。本模块提供了通用的浅层复制和深层复制操作。
2.2 浅拷贝
创建新的对象,拷贝第一层的数据,嵌套层会指向原来的内存地址。实现浅拷贝,首先要导入必要的模块copy模块
import copy #导入模块
li = [1,2,[3,4,5]] #定义一个嵌套列表
li1 = copy.copy(li) #浅拷贝
li.append(6)
print("li:",li,"li1:",li1)
运行上述代码,得到的结果与赋值完全不同,我们会发现li的改变,不会影响到li1
再查看两个变量的内存地址,是否一样
print(id(li),id(li1))
地址不相同,说明不是同一个对象。上面提到说浅拷贝,只拷贝第一层,嵌套层还是会指向原来的地址,因此我们来验证一下。
import copy
li = [1,2,[3,4,5]]
li1 = copy.copy(li)
li[2].append(6)
print("li:",li,"li1:",li1)
我们发现两个变量都改变了。外层的内存地址不同,内存的地址相同,浅拷贝的优点:拷贝速度快,占用空间少。
2.3 深拷贝
外层和内层的都拷贝
示例:
import copy
li = [1,2,[3,4,5]]
li1 = copy.deepcopy(li) #深拷贝则是deepcopy
li[2].append(6)
print("li:",li,"li1:",li1)
执行上述代码发现,往嵌套层添加元素,并没有改变另一个对象