当前位置: 首页 > ds >正文

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)

 

执行上述代码发现,往嵌套层添加元素,并没有改变另一个对象 

 

 

http://www.xdnf.cn/news/15755.html

相关文章:

  • oracle rac自动表空间自动扩展脚本
  • 基于 Electron + Vue 3 的桌面小说写作软件架构设计
  • 前端设计模式应用精析
  • 用Python实现神经网络(一)
  • 御控县级供水调度系统:数字化整合,构建全流程智能调度体系
  • day055-Dockerfile与常用指令
  • OPS飞腾主板:开启教与学的深层次互动
  • [IRF/Stack]华为/新华三交换机堆叠配置
  • onenote千年老bug,字体bug (calibri微软雅黑) 的解决
  • 神经网络构建
  • AI+医疗!VR和MR解剖学和针灸平台,智能时代如何重塑健康未来
  • Java常用命令汇总
  • Windows10笔记本电脑开启BIOS
  • (四)OpenCV——特征点检测与匹配
  • 6. 工程化实践类:《Webpack 5 性能优化全指南:从构建速度到输出质量》
  • Flutter状态管理篇之ChangeNotifier(一)
  • 使用 docker 安装 openldap
  • 板凳-------Mysql cookbook学习 (十二--------1)
  • 从零开始的云计算生活——第三十三天,关山阻隔,ELK日志分析
  • 【Leetcode】栈和队列算法题(逆波兰表达式、二叉树层序遍历、最小栈、栈的压入弹出序列)
  • MySQL详解一
  • Oracle 成本优化器(CBO)与数据库统计信息:核心原理与实践
  • 【前端】Power BI自动化指南:从API接入到Web嵌入
  • docker安装与简单项目上手
  • 使用docker安装、启动jenkins服务(mac系统)
  • 3D工业相机是什么?如何选择和使用它?
  • 如何构建一个基于大模型的实时对话3D数字人?
  • 3D Gaussian Splatting (3DGS) 从入门到精通:安装、训练与常见问题全解析
  • c++:类型转换函数
  • 【神经网络在MATLAB中是如何实现的?】