python类型转换深浅拷贝

1.类型转换

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

float->int

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

a = 1.2
print(type(a))   #<class 'float'>
b = int(a)
print(type(b))    #<class 'int'>print(int(1.8))   #1

str->int   如果字符串中有数字和正负号(在开头)以外的字符就会报错(+/-写在前面表示正负号,写在后面是加减号)

a = int('123')
print(a,type(a))   #123 <class 'int'>

从控制台输入数字的时候可以使用强制转换,input输入时默认输入的是字符串类型

age = int(input("请输入年龄"))
if age > 18:print("成年了")

1.2 float(x):转换为一个小数

整形转换为浮点型会自动添加一位小数

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

print(float(11))   #11.0
print(float(-23))   #-23.0
print(float('+2.3456'))  #2.345
#print(float(10-))   报错

1.3 str(x):将对象转换为字符串类型,任何类型都可以转换

浮点型转换成str会自动去除末位为0的小数部分,保留一位小数

a = 100
print(type(a),a)   #<class 'int'> 100b = str(a)
print(type(b),b)   #<class 'str'> 100st = str(-1.8)
print(type(st),st)  #<class 'str'> -1.8st1 = str(-1.00000)
print(type(st1),st1)  #<class 'str'> -1.0st2 = str(-1.02300)
print(type(st2),st2)   #<class 'str'> -1.023

转换列表:

list = [1,2,3]
st = str(list)
print(type(st),st)   #<class 'str'> [1, 2, 3]

1.4 eval (x):用来计算在字符串中的有效python表达式,并返回表达式的值

eval非常长强大,但不够安全,容易被恶意修改数据

print(10+10)   #20
print('10'+'10')  #1010
print('10+10')   #10+10
print(eval('10+10'))  #20 执行运算,并返回运算值

eval()可以实现list、dict、tuple和str之间的转换;相当于去掉字符串的引号

st1 = '[[1,2],[3,4],[5,6]]'
print(type(st1),st1)   #<class 'str'> [[1,2],[3,4],[5,6]]li = eval(st1)
print(type(li),li)   #<class 'list'> [[1, 2], [3, 4], [5, 6]]
st2 = "{'name':'panda','age':5}"
print(type(st2),st2)  #<class 'str'> {'name':'panda','age':5}
dic = eval(st2)
print(type(dic),dic)  #<class 'dict'> {'name':'panda','age':5}

1.5 tuple(x):将可迭代对象转换为元组类型

list = [1,2,3,4]
tua = tuple(list)
print(tua,type(tua))  #(1, 2, 3, 4) <class 'tuple'>

1.6 list(x):将可迭代对象转换为列表类型

支持转换为list的类型:str 、tuple、dict、set

字典转换成列表,会取键名作为列表的值。

集合转化成列表会先去重,在转换(字母无序)。

print(list('abcdef'))      #['a','b','c','d','e','f']
print(list((1,2,3,4)))   #[1,2,3,4]
print(list({'name':'panda','age':5}))    #['name','age']
print(list({'a','b','c','b'}))    #['c','b','a']

2.深浅拷贝(只针对可变对象

2.1赋值:对于列表,字典,集合这种类型,复制就等于完全共享资源,一个值的改变会完全被另一个值共享。赋值后的对象会随着原对象一起变换。

li = [1,2,3,4]
li2 = li
print('li',li)   #li [1, 2, 3, 4]
print('li2',li2)   #li2 [1, 2, 3, 4]
li.append(5)
print('赋值后:li',li)  #赋值后:li [1, 2, 3, 4, 5]
print('赋值后:li2',li2)  #赋值后:li2 [1, 2, 3, 4, 5]

2.2浅拷贝(数据半共享)

会创建新的对象,拷贝第一层的数据,嵌套层会指向原来的内存地址

首先需要导入copy模块

查看内存地址:id()

外层的内存地址不同,内层的内存地址相同。大多数形况下都使用浅拷贝

优点:拷贝速度快,且占用空间少,拷贝效率高。

import copy #导入copy模块li = [1,2,3,[4,5,6]]
li2 = copy.copy(li)     #浅拷贝
print('li',li)    #li [1, 2, 3, [4, 5, 6]]
print('li2',li2)   #li2 [1, 2, 3, [4, 5, 6]]
print(id(li))   #2256239241864
print(id(li2))  #2256239241992内存地址不一样,不是同一对象
li.append(8)
print('赋值后:li', li)  #赋值后:li [1, 2, 3, [4, 5, 6],8]
print('赋值后:li2', li2)  #赋值后:li [1, 2, 3, [4, 5, 6]]li[3].append(7)   #往嵌套列表添加元素
print('赋值后:li', li)  #赋值后:li [1, 2, 3, [4, 5, 6,7],8]
print('赋值后:li2', li2)  #赋值后:li [1, 2, 3, [4, 5, 6,7]]
print(id(li[3]))   #2288402279240
print(id(li2[3]))   #2288402279240 内存地址相同

2.3深拷贝(数据完全不共享)

外层对象和内层元素都拷贝一遍,深拷贝数据变化只影响自己本身,和原来的对象没有关联。

也要导入copy模块

import copy #导入copy模块
li = [1,2,3,[4,5,6]]
li2 = copy.deepcopy(li)
print('li',li)    #li [1, 2, 3, [4, 5, 6]]
print('li2',li2)   #li2 [1, 2, 3, [4, 5, 6]]
print(id(li))   #2704884215048
print(id(li2))  #2704884214792内存地址不一样,不是同一对象
li.append(8)
print('赋值后:li', li)  #赋值后:li [1, 2, 3, [4, 5, 6],8]
print('赋值后:li2', li2)  #赋值后:li [1, 2, 3, [4, 5, 6]]li[3].append(7)   #往嵌套列表添加元素
print('赋值后:li', li)  #赋值后:li [1, 2, 3, [4, 5, 6,7],8]
print('赋值后:li2', li2)  #赋值后:li [1, 2, 3, [4, 5, 6,]]
print(id(li[3]))   #2704883434440
print(id(li2[3]))   #2704884215304 内存地址不同

3.可变对象

含义:存储空间保存的数据允许被修改,这种数据就是可变类型(变量对应的值可以被修改,但是内存地址不会发生改变)

常见的可变类型:列表(list)、字典(dict)、集合(set)  

li = [1,2,3,4]
print(li,id(li))   #[1, 2, 3, 4] 1886619741320
li.append(5)    #添加元素
print(li,id(li))   #[1, 2, 3, 4, 5] 1886619741320dic = {'name':'pande','age':5}
print(dic,id(dic))     #{'name': 'pande', 'age': 5} 2103573679704
dic['name'] = 'monkey'   #修改元素
print(dic,id(dic))     #{'name': 'monkey', 'age': 5} 2103573679704set = {1,2,3,4,5}
print(set,id(set))   #{1, 2, 3, 4, 5} 2769478186152
set.remove(3)    #删除元素
print(set,id(set))   #{1, 2, 4, 5} 2769478186152

4.不可变对象

含义:存储空间保存的数据不允许被修改,这种数据就是不可变类型(变量对应的值不能被修改,修改的话就会生成新的值,从而分配新的内存空间)

常见的不可变类型:数值类型(int 、bool、float、complex)、字符串(str)、元组(tuple)

元组不支持新增修改和删除操作。

n = 10
print(n,id(n))   #10 140719911371312
n = 15
print(n,id(n))   #15 140719911371472str = 'hello'
print(str,id(str))   #hello 2348660297456
str = 'world'
print(str,id(str))   #world 2348660297520tua = (1,2,3)
print(tua,id(tua))   #(1, 2, 3) 1535623178104
tua =('a','b','c')
print(tua,id(tua))   #('a', 'b', 'c') 1535623178504

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23669.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为认证考试证书下载步骤(纸质+电子版)

华为考试证书可以通过官方渠道下载相应的电子证书&#xff0c;部分高级认证如HCIE还支持申请纸质证书。 一、华为电子版证书申请步骤如下&#xff1a; ①访问华为培训与认证网站 打开浏览器&#xff0c;登录华为培训与认证官方网站 ②登录个人账号 在网站首页&#xff0c;点…

【UCB CS 61B SP24】Lecture 11 - Inheritance 4: Iterators, Object Methods学习笔记

本文内容为集合&#xff08;Set&#xff09;的介绍与使用&#xff0c;并通过数组手动实现集合&#xff0c;接着介绍了迭代器&#xff0c;使用迭代器我们能够更方便地遍历集合中的元素。 1. Set 1.1 Set介绍与Java实现类的使用 集合&#xff08;Set&#xff09;是一种常见的数…

sessionStorage问题的思考和解决

通过前端访问成功&#xff0c;直接访问后端接口失败。思考的过程、问题的解决Session和sessionStorage 通过前端访问成功&#xff0c;直接访问后端接口失败。 做黑马点评的使用Redis代替Session实现短信登录的功能时&#xff0c;遇到了一个问题&#xff1a; 就是我设计好代码后…

YOLO11改进-模块-引入混合结构模块Mix Structure Block 提高多尺度、小目标

在图像去雾领域&#xff0c;传统的基于卷积神经网络&#xff08;CNN&#xff09;和 Transformer 的方法存在局限性。CNN 方法大多存在感受野不足的问题&#xff0c;限制了单个像素在神经网络中的参考范围&#xff0c;部分考虑大感受野的 CNN 方法又忽略了图像的多尺度特性&…

MySQL主从架构

MySQL主从架构 MySQL REPLICATION 在实际生产环境中&#xff0c;如果对数据库的读和写都在一个数据库服务器中操作。无论是在安全性、高可用性&#xff0c;还是高并发等各个方面都是完全不能满足实际需求的&#xff0c;因此&#xff0c;一般来说都是通过主从复制&#xff08;…

6层高速PCB设计入门第1~10讲

第一讲 课程介绍 无痛入门&#xff01;6层高速PCB设计&#xff01;_哔哩哔哩_bilibili 第二讲 逻辑派原理图分析 开发板资料文档&#xff1a;https://wiki.lckfb.com/zh-hans/fpga-ljpi/ 最需要注意的信号就是FPGA与DDR3、HDMI交互的信号&#xff0c;其次是GD32读写TF Card的…

Mesh自组网技术及应用

前言&#xff1a; Mesh自组网随着无线技术发展&#xff0c;在消费领域最近比较有热度。当然应用的场景不限于普通消费领域&#xff0c;在工业、军事领域被也是越来越重要。 一、什么是无线Mesh技术 1.1 无线自组网概念 无线Mesh是一种智能、自组织、多跳、移动、对等、去中心…

Python游戏编程之赛车游戏6-3

1 “敌人”汽车类的创建 在创建玩家汽车类之后&#xff0c;接下来创建“敌人”汽车类。“敌人”汽车类与玩家类一样&#xff0c;也是包含两个方法&#xff0c;一个是__init__()&#xff0c;另一个是move()。 1.1 __init__()方法 “敌人”汽车类的__init__()方法代码如图1所示…

垂类大模型微调(二):使用LLaMA-Factory

上一篇博文和大家一起安装了LLaMA-Factory工具,并下载了大模型在上面进行了简单的加载和推理,今天尝试通过LoRa技术对大模型进行微调; 一、训练集准备 1.1 介绍训练集结构 这里演示对Qwen2.5-0.5B-Instruct-GPTQ-Int4模型进行LoRA微调, 大家可以根据垂类大模型微调(一)…

什么是MySql的主从复制(主从同步)?

主页还有其他面试题总结&#xff0c;有需要的可以去看一下&#xff0c;喜欢的就留个三连再走吧~ 1.什么是MySql的主从复制原理&#xff1f; 主从复制的核心就是二进制binlog&#xff08;DDL&#xff08;数据定义语言&#xff09;语句和DML&#xff08;数据操纵语言&#xff09…

坐标变换及视图变换和透视变换(相机透视模型)

文章目录 2D transformationScaleReflectionShear&#xff08;切变&#xff09;Rotation around originTranslationReverse变换顺序复杂变换的分解 齐次坐标&#xff08;Homogenous Coordinates&#xff09;3D transformationScale&TranslationRotation Viewing / Camera t…

文字语音相互转换

目录 1.介绍 2.思路 3.安装python包 3.程序&#xff1a; 4.运行结果 1.介绍 当我们使用一些本地部署的语言模型的时候&#xff0c;往往只能进行文字对话&#xff0c;这一片博客教大家如何实现语音转文字和文字转语音&#xff0c;之后接入ollama的模型就能进行语音对话了。…

Unity Shader 学习13:屏幕后处理 - 使用高斯模糊的Bloom辉光效果

目录 一、基本的后处理流程 - 以将画面转化为灰度图为例 1. C#调用shader 2. Shader实现效果 二、Bloom辉光效果 1. 主要变量 2. Shader效果 &#xff08;1&#xff09;提取较亮区域 - pass1 &#xff08;2&#xff09;高斯模糊 - pass2&3 &#xff08;3&#xff…

PING命令TTL解析

在 ping 命令中&#xff0c;TTL&#xff08;Time to Live&#xff0c;生存时间&#xff09; 是 IP 数据包的核心字段之一&#xff0c;用于控制数据包在网络中的生命周期。以下是针对 TTL 的简明解析&#xff1a; 1. TTL 的核心作用 防循环机制&#xff1a;TTL 是一个计数器&a…

Linux 第三次脚本作业

源码编译安装httpd 2.4&#xff0c;提供系统服务管理脚本并测试&#xff08;建议两种方法实现&#xff09; 一、第一种方法 1、把 httpd-2.4.63.tar.gz 这个安装包上传到你的试验机上 2、 安装编译工具 (俺之前已经装好了&#xff09; 3、解压httpd包 4、解压后的httpd包的文…

(七)趣学设计模式 之 适配器模式!

目录 一、 啥是适配器模式&#xff1f;二、 为什么要用适配器模式&#xff1f;三、 适配器模式的实现方式1. 类适配器模式&#xff08;继承插座 &#x1f468;‍&#x1f469;‍&#x1f467;‍&#x1f466;&#xff09;2. 对象适配器模式&#xff08;插座转换器 &#x1f50c…

【NLP】注意力机制

目录 一、认识注意力机制 1.1 常见注意力计算规则 1.2 注意力机制的作用 1.3 注意力机制代码实现 二、注意力机制原理 2.1 attention计算过程 2.2 attention的计算逻辑 2.3 有无attention模型对比 2.3.1 无attention机制的模型 2.3.2 有attention机制的模型 三、Se…

Spring Boot 整合 Druid 并开启监控

文章目录 1. 引言2. 添加依赖3. 配置数据源4. 开启监控功能5. 自定义 Druid 配置&#xff08;可选&#xff09;6. 访问监控页面7. 注意事项8. 总结 Druid 是一个由阿里巴巴开源的高性能数据库连接池&#xff0c;它不仅提供了高效的连接管理功能&#xff0c;还自带了强大的监控…

红帽7基于kickstart搭建PXE环境

Kickstart 文件是一种配置文件&#xff0c;用于定义 Linux 系统安装过程中的各种参数&#xff0c;如分区、网络配置、软件包选择等。system-config-kickstart 提供了一个图形界面&#xff0c;方便用户快速生成这些配置文件。 用户可以通过图形界面进行系统安装的详细配置&…

C/C++跳动的爱心

系列文章 序号直达链接1C/C李峋同款跳动的爱心2C/C跳动的爱心3C/C经典爱心4C/C满屏飘字5C/C大雪纷飞6C/C炫酷烟花7C/C黑客帝国同款字母雨8C/C樱花树9C/C奥特曼10C/C精美圣诞树11C/C俄罗斯方块小游戏12C/C贪吃蛇小游戏13C/C孤单又灿烂的神14C/C闪烁的爱心15C/C哆啦A梦16C/C简单…