Python:类型转换和深浅拷贝,可变与不可变对象

打印 上一主题 下一主题

主题 1009|帖子 1009|积分 3027

int():转换为一个整数,只能转换由纯数字构成的字符串
浮点型强转整型会去掉小数点及背面的数,只保留整数部分
#假如字符串中有数字和正负号以外的字符就会报错
float():整形转换为浮点型会自动添加一位小数 .0
假如字符串中有正负号,数字和小数点以外的字符则不支持转换
str():转换为字符串类型,任何类型都可以转换成字符串类型 
float转换成str会取出末尾为零的小数部分
eval():执行一个字符串表达式,并返回表达式的值
eval可以实现list,dict,tuple和str之间的转换,虽然功能强大但是不敷安全,容易被恶意修改数据不建议使用
list():将可迭代对象转换为列表
支持转换为list的类型:str,tuple,dict,set#其中字典转换成列表只会取键名作为列表的值

拷贝:

赋值:完全共享资源,一个值的改变会完全被另一个值共享
  1. li=[1,2,3,4]
  2. li2=li
  3. print(li)
  4. print(li2)
  5. li.append(5)
  6. print(li)
  7. print(li2)
复制代码
输出结果为
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
浅拷贝:会创建新的对象,拷贝第一层的数据,嵌套层会指向原来的内存地点(数据半共享)
  1. import copy
  2. li=[1,2,3,4,[5,6]]
  3. li2=copy.copy(li)
  4. print(li)
  5. print(li2)
复制代码
运行结果为:
[1, 2, 3, 4, [5, 6]]
[1, 2, 3, 4, [5, 6]],结果雷同,但是id内存地点不同,说明不是同一个对象
  1. import copy
  2. li=[1,2,3,4,[5,6]]
  3. li2=copy.copy(li)
  4. print(li)
  5. print(li2)li.append(7)print(li)print(li2)输出结果为:
复制代码
[1, 2, 3, 4, [5, 6]]
[1, 2, 3, 4, [5, 6]]
[1, 2, 3, 4, [5, 6], 7]
[1, 2, 3, 4, [5, 6]],可见添加数据后,数据没有完全copy
*假如在其嵌套列表中添加数据,可以copy过去,而且内存地点雷同
长处:拷贝速度快,占用空间少
深拷贝(数据不共享):外层的对象和内部的元素都拷贝了一遍
  1. import copy
  2. li=[1,2,3,4,[5,6]]
  3. li2=copy.deepcopy(li)
  4. print(li)
  5. print(li2)
  6. li.append(7)
  7. print(li)
  8. print(li2)
  9. #嵌套列表值添加
  10. li[4].append(8)
  11. print(li)
  12. print(li2)
复制代码
输出结果为:
[1, 2, 3, 4, [5, 6]]
[1, 2, 3, 4, [5, 6], 7]
[1, 2, 3, 4, [5, 6]]
[1, 2, 3, 4, [5, 6, 8], 7]
[1, 2, 3, 4, [5, 6]]#深拷贝中在嵌套列表li添加值不会影响深拷贝后的列表li2,且内存地点不一样

可变对象:

*元组为不可变类型,可变类型为变量对应的值可以修改(增编削查),但是内存地点不会发生改变
不可变对象:

变量对应的值不可以被修改,假如修改就会天生一个新的值从而分配新的内存空间
  1. n=10
  2. print("原地址:",id(n))
  3. n=15
  4. print("现地址:",id(n))
复制代码
输出结果为:
原地点: 140713881896136
现地点: 140713881896296#内存地点发生变化,修改n的值就会天生新的内存地点
**前面说的深浅拷贝只针对可变对象,不可变对象没有这个说法









免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表