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

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

int():转换为一个整数,只能转换由纯数字组成的字符串

浮点型强转整型会去掉小数点及后面的数,只保留整数部分

#如果字符串中有数字和正负号以外的字符就会报错

float():整形转换为浮点型会自动添加一位小数 .0

如果字符串中有正负号,数字和小数点以外的字符则不支持转换

str():转换为字符串类型,任何类型都可以转换成字符串类型 

float转换成str会取出末尾为零的小数部分

eval():执行一个字符串表达式,并返回表达式的值

eval可以实现list,dict,tuple和str之间的转换,虽然功能强大但是不够安全,容易被恶意修改数据不建议使用

list():将可迭代对象转换为列表

支持转换为list的类型:str,tuple,dict,set#其中字典转换成列表只会取键名作为列表的值

拷贝:

赋值:完全共享资源,一个值的改变会完全被另一个值共享

li=[1,2,3,4]
li2=li
print(li)
print(li2)
li.append(5)
print(li)
print(li2)

输出结果为

[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

浅拷贝:会创建新的对象,拷贝第一层的数据,嵌套层会指向原来的内存地址(数据半共享)

import copyli=[1,2,3,4,[5,6]]
li2=copy.copy(li)
print(li)
print(li2)

运行结果为:

[1, 2, 3, 4, [5, 6]]
[1, 2, 3, 4, [5, 6]],结果相同,但是id内存地址不同,说明不是同一个对象

import copyli=[1,2,3,4,[5,6]]
li2=copy.copy(li)
print(li)
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过去,而且内存地址相同

优点:拷贝速度快,占用空间少

深拷贝(数据不共享):外层的对象和内部的元素都拷贝了一遍

import copyli=[1,2,3,4,[5,6]]
li2=copy.deepcopy(li)
print(li)
print(li2)
li.append(7)
print(li)
print(li2)
#嵌套列表值添加
li[4].append(8)
print(li)
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,且内存地址不一样

可变对象:

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

不可变对象:

变量对应的值不可以被修改,如果修改就会生成一个新的值从而分配新的内存空间

n=10
print("原地址:",id(n))
n=15
print("现地址:",id(n))

输出结果为:

原地址: 140713881896136
现地址: 140713881896296#内存地址发生变化,修改n的值就会生成新的内存地址

**前面说的深浅拷贝只针对可变对象,不可变对象没有这个说法

http://www.lryc.cn/news/546873.html

相关文章:

  • Redis——缓存穿透、击穿、雪崩
  • 8.1.STM32_OLED
  • Gartner发布安全运营指标构建指南
  • 【赵渝强老师】监控Redis
  • 【Unity】搭建HTTP服务器并解决IP无法访问问题解决
  • 如何远程访问svn中的URL
  • Free Auto Clicker - 在任意位置自动重复鼠标点击
  • 0005__PyTorch 教程
  • Unity Burst编译
  • 软件测试中的BUG
  • LabVIEW基于IMAQ实现直线边缘检测
  • C#:LINQ学习笔记01:LINQ基础概念
  • 15Metasploit框架介绍
  • NLP如何训练AI模型以理解知识
  • 【树莓派学习】树莓派3B+的安装和环境配置
  • python连接neo4j的方式汇总
  • Graph RAG 迎来记忆革命:“海马体”机制让问答更精准!
  • Spring(三)容器-注入
  • 剧本杀门店预约小程序:市场发展下的刚需
  • stable-diffusion-webui 加载模型文件
  • Ubuntu20.04双系统安装及软件安装(十一):向日葵远程软件
  • 华为云 | 快速搭建DeepSeek推理系统
  • printf 与前置++、后置++、前置--、后置-- 的关系
  • centos7操作系统下安装docker,及查看docker进程是否启动
  • 【向量数据库Weaviate】 和Elasticsearch的区别
  • 深度学习-大白话解释循环神经网络RNN
  • python3.13安装教程【2025】python3.13超详细图文教程(包含安装包)
  • RocketMQ的运行架构
  • SLAM文献之-DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras
  • nano 是 Linux 系统中的一个 命令行文本编辑器