08.类型转换、深浅拷贝

08.类型转换、深浅拷贝

  • 01.类型转换
    • 1.1 int()
    • 1.2 float
    • 1.3 str()
    • 1.4 eval()
    • 1.5 list()
  • 02.深浅拷贝
    • 2.1 赋值
    • 2.2 浅拷贝(数据半共享)
    • 2.3 深拷贝(数据完全不共享)
  • 03.可变对象
  • 04.不可变对象

01.类型转换
02.深浅拷贝
03.可变对象
04.不可变对象

01.类型转换

在这里插入图片描述

1.1 int()

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

a = 1.2
print(type(a))
b = int(a)
print(type(b))
#浮点型强转整型会去掉小数点及后面的数值,只保留整数部分

在这里插入图片描述

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

a = 'a'
print(type(a))
b = int(a)   #只能转换由纯数字组成的字符串
print(type(b))

在这里插入图片描述

a = '123'
print(type(a))
b = int(a)
print(type(b))

在这里插入图片描述

age = input("请输入您的年龄:") #input默认输入的是字符串类型
if int(age) >= 18:
print("成年了")

在这里插入图片描述

1.2 float

float():转换为一个小数
整型转换为浮点型,会自动添加一位小数
如果字符串中有正负号、数字和小数点以外的字符,则不支持转换

print(float(11))
print(float(-11))
print(float('+11.345'))
print(float('11-'))

在这里插入图片描述

1.3 str()

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

n = 100
print(type(n)) #<class 'int'>
n2 = str(n)
print(n2,type(n2)) #100 <class 'str'>

st = str(-1.80) #float转换成str会取出末位为0的小数部分
print(st,type(st)) #-1.8 <class 'str'>

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

1.4 eval()

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

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

eval()可以实现list、dict、tuple和str之间的转换
(1)str->list

st1 = '[[1,2],[3,4],[5,6]]'
print(st1,type(st1)) #[[1,2],[3,4],[5,6]] <class 'str'>
li = eval(st1)
print(li,type(li)) #[[1, 2], [3, 4], [5, 6]] <class 'list'>

(2)str->dict

st2 = "{'name':'bingbing','age':18}"
dic = eval(st2)
print(dic,type(dic)) #{'name': 'bingbing', 'age': 18} <class 'dict'>

eval()非常强大,但是不够安全,容易被恶意修改数据,不建议使用

1.5 list()

list():将可迭代对象转换成列表
支持转换为list的类型:str、tuple、dict、set
str()->list()

print(list('abcdefg')) #['a', 'b', 'c', 'd', 'e', 'f', 'g']
# #print(list(12345)) #报错

tuple()->list()

print(list((1,2,3,4))) #[1, 2, 3, 4]

在这里插入图片描述

dict()->list()
字典转换成列表,会取键名作为列表的值

print(list({'name':'xiaoming','age':15})) #['name', 'age']

在这里插入图片描述

set() ->list()
基本转换成列表,会先去重,再转换

print(list({'a','b','c','d'})) #['b', 'c', 'a', 'd']
print(list({'a','b','c','d','b'})) #['b', 'c', 'a', 'd']

02.深浅拷贝

浅拷贝:浅拷贝是对于一个对象的顶层拷贝, 拷贝了最外层的对象,内部的元素只拷贝了一个引用。
深拷贝:深拷贝是对于一个对象所有层次的拷贝 (外层的对象和内部的元素都拷贝了一遍)
浅拷贝:节省资源和内存空间
深拷贝:数据拷贝更加安全

2.1 赋值

赋值:会随着元对象一起变量
赋值:等于完全共享资源,一个值的改变会完全被另一个值共享

li = [1,2,3,4]
print(li)
li2 = li
print(li2)
#查看内存地址 id()
print('li内存地址:',id(li))
print('li2内存地址:',id(li2))
#给li列表新增元素
li.append(5)
print('新增后的li',li)
print('新增后的li2',li2)

在这里插入图片描述

2.2 浅拷贝(数据半共享)

浅拷贝:会创建新的对象,拷贝第一层的数据,嵌套层会指向原来的内存地址
import copy #导入copy模块

li = [1,2,3,[4,5,6]] #定义一个嵌套列表
print(li)
li2 = copy.copy(li) #浅拷贝
print(li2)
#查看内存地址 id()
print('li内存地址:',id(li))
print('li2内存地址:',id(li2))
#内存地址不一样,说明不是同一个对象

#给li列表新增元素
li.append(5)
print('新增后的li',li)
print('新增后的li2',li2)

#查看内存地址 id()
print('li内存地址:',id(li))
print('li2内存地址:',id(li2))

#往嵌套列表添加元素
li[3].append(7)
print('li:',li)
print('li2:',li2)
print('li[3]内存地址:',id(li[3]))
print('li2[3]内存地址:',id(li2[3]))
#外层的内存地址不同,但是内层的内存地址相同

在这里插入图片描述

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

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

深拷贝:外层的对象和内部的元素都拷贝了一遍
import copy #导入copy模块

li = [1,2,3,[4,5,6]] #定义一个嵌套列表
print(li)
li2 = copy.deepcopy(li) #深拷贝
print(li2)
#查看内存地址 id()
print('li内存地址:',id(li))
print('li2内存地址:',id(li2))
#内存地址不一样,说明不是同一个对象

#给li列表新增元素
li.append(5)
print('新增后的li',li)
print('新增后的li2',li2)

#查看内存地址 id()
print('li内存地址:',id(li))
print('li2内存地址:',id(li2))

#往嵌套列表添加元素
li[3].append(7)
print('li:',li)
print('li2:',li2)
print('li[3]内存地址:',id(li[3]))
print('li2[3]内存地址:',id(li2[3]))
#外层的内存地址不同,内层的内存地址也不相同
#深拷贝数据变化只影响自己本身,跟原来的对象没有关联

在这里插入图片描述

03.可变对象

可变对象:存储空间保存的数据允许被修改,这种数据就是可变类型。

==常见的可变类型有: ==
列表 list 字典 dict 集合 set

含义:变量对应的值可以修改,但是内存地址不会发生改变

li = [1,2,3,4]
print('li的原内存地址:',id(li),li)
li.append(5)
print('li的现内存地址:',id(li),li)

在这里插入图片描述

dic = {'name':'xiaoming','age':20}
print('dic的原内存地址:',id(dic),dic)
dic['name'] = 'jack'
print('dic的现内存地址:',id(dic),dic)

在这里插入图片描述

set = {1,2,3,4,5}
print('set的原内存地址:',id(set),set)
set.remove(4)
print('set的现内存地址:',id(set),set)

在这里插入图片描述

04.不可变对象

不可变对象:存储空间保存的数据不允许被修改,这种数据就是不可变类型。

==常见的不可变类型有: ==
1.数值类型 int, bool, float, complex
2.字符串 str
3.元组 tuple

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

n = 10
print('原地址:',id(n),n)
n = 15
print('现地址:',id(n),n)
#内存地址不一样:修改n的值就会生成新的值,重新赋值给变量n

在这里插入图片描述

str = 'a'
print('原地址:',id(str),str)
str = 'book'
print('现地址:',id(str),str)

在这里插入图片描述

tua = (1,2,3,4)
print('tua的原内存地址:',id(tua),tua)
tua = ('a',"b",'c')
print('tua的现内存地址:',id(tua),tua)

在这里插入图片描述

注意:前面所说的深浅拷贝只针对可变对象,不可变对象没有深浅拷贝

学习地址:https://www.bilibili.com/video/BV1FS421K7Hs/?p=16&spm_id_from=pageDriver&vd_source=279585e3656eb1829d1f31997be26270

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自定义 Unity Scene 的界面工具

介绍 文档中会进行SceneView的自定义扩展&#xff0c;实现显示常驻GUI和添加自定义叠加层&#xff08;Custom Overlay&#xff09;。 最近项目开发用回了原生的Unity UI相关内容。对于之前常用的FairyGUI来说&#xff0c;原生的UGUI对于UI同学来讲有些不太方便。再加上这次会…

【STM32嵌入式系统设计与开发】——14PWM(pwm脉宽输入应用)

这里写目录标题 一、任务描述二、任务实施1、WWDG工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;USART1初始化函数(usart1_init())&#xff08;3&#xff09;USART数据发送函数&#xff08; USART1_Send_Data&#xff08;&#xff09…

【随笔】Git -- 高级命令(中篇)(七)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

【Linux】ubuntu/centos8安装zsh终端

本文首发于 ❄️慕雪的寒舍 根据这篇知乎文章进行 https://zhuanlan.zhihu.com/p/514636147 1.安装zsh 先安装zsh并设置为默认的终端 # ubuntu sudo apt install zsh # centos sudo yum install zsh util-linux-user # 通用 chsh -s /bin/zsh如果centos下找不到chsh命令&am…

【优化算法】VMD分解算法的16种优化,对K和alpha参数寻优,附MATLAB代码

在上一篇文章中&#xff0c;我们介绍了优化算法的基本原理和一些常见的生物启发式算法。另外我们封装了一个16合1的寻优函数。 不过在上一篇中&#xff0c;我们举了一个简单的数值模型作为适应度函数的演示案例&#xff0c;然而在实际的研究中&#xff0c;适应度函数往往要复杂…

iOS移动应用实时查看运行日志的最佳实践

目录 一、设备连接 二、使用克魔助手查看日志 三、过滤我们自己App的日志 &#x1f4dd; 摘要&#xff1a; 本文介绍了如何在iOS iPhone设备上实时查看输出在console控制台的日志。通过克魔助手工具&#xff0c;我们可以连接手机并方便地筛选我们自己App的日志。 &#x1f4…

『Apisix安全篇』APISIX 加密传输实践:SSL/TLS证书的配置与管理实战指南

&#x1f4e3;读完这篇文章里你能收获到 &#x1f31f; 了解SSL/TLS证书对于网络通信安全的重要性和基础概念。&#x1f527; 掌握在APISIX中配置SSL/TLS证书的基本步骤和方法。&#x1f4dd; 学习如何通过修改监听端口&#xff0c;使HTTPS请求更加便捷。&#x1f6e0;️ 认识…

Redis开源协议调整,我们怎么办?

2024年3月20日, Redis官方宣布&#xff0c;从 Redis 7.4版本开始&#xff0c;Redis将获得源可用许可证 ( RSALv2 ) 和服务器端公共许可证 ( SSPLv1 ) 的双重许可&#xff0c;时间点恰逢刚刚完成最新一轮融资&#xff0c;宣布的时机耐人寻味。 Redis协议调整&#xff0c;对云计算…

FFmpeg 详解

FFmpeg 详解 FFmpeg 详解整体结构不同下载版本的区别常用库常用函数初始化封装格式解码器 版本对比组件注册方式对比FFmpeg 3.x 组件注册方式FFmpeg 4.x 组件注册方式 结构体比对函数对比avcodec_decode_video2()vcodec_encode_video2() 数据结构结构体分析AVFormatContextAVIn…

Day5-

Hive 窗口函数 案例 需求&#xff1a;连续三天登陆的用户数据 步骤&#xff1a; -- 建表 create table logins (username string,log_date string ) row format delimited fields terminated by ; -- 加载数据 load data local inpath /opt/hive_data/login into table log…

商场促销--策略模式

1.1 商场收银软件 package com.lhx.design.pattern.test;import java.util.Scanner;public class Test {public static void main(String[] args){System.out.println("**********************************************"); System.out.println("《大话设计模式…

聊聊测试用例评审流程

测试人员将需求熟悉完成后&#xff0c;开始编写相应的测试用例&#xff0c;待测试用例编写完成后只是测试用例完成前的第一步&#xff0c;后边的流程需要组织线上或线下评审会议等等。 首先要了解测试用例评审的最终目的是什么&#xff1a;提高测试用例的质量和覆盖率&#xff…

利用Node.js实现拉勾网数据爬取

引言 拉勾网作为中国领先的互联网招聘平台&#xff0c;汇集了丰富的职位信息&#xff0c;对于求职者和人力资源专业人士来说是一个宝贵的数据源。通过编写网络爬虫程序&#xff0c;我们可以自动化地收集这些信息&#xff0c;为求职决策和市场研究提供数据支持。Node.js以其非阻…

【Frida】【Android】08_爬虫之网络通信库okhttp3

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

【Spring】分别基于XML、注解和配置类实现Spring的IOC(控制反转)

目录 1、理解loC是什么 2、基于XML实现Spring的IOC&#xff08;这种方式已经不怎么使用了&#xff09; 3、基于注解实现Spring的IOC 4、基于javaConfig实现Spring的IOC 5、总结 1、理解loC是什么 lOC&#xff1a;lnversion of Control 控制反转&#xff0c;简称就是 IOC 控…

如何使用极狐GitLab Maven 仓库?

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何使用极狐GitLa…

Yarn与Zookeeper的介绍

Yarn--三大调度策略 FIFO(先进先出): 目前几乎已经没有人使用了. 类似于: 单行道. 好处: 每个计算任务能独享集群100%的资源. 弊端: 不能并行执行, 如果大任务过多, 会导致小任务执行时间过长. Capacity(容量调度): 我们用…

入门教程:Windows搭建C语言和EasyX开发环境

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; 如果对你…

【论文阅读】TimesNet: Temporal 2D-Variation Modeling for General Time Series Analysis

TimesNet: Temporal 2D-Variation Modeling for General Time Series Analysis 引用&#xff1a; Wu H, Hu T, Liu Y, et al. Timesnet: Temporal 2d-variation modeling for general time series analysis[C]//The eleventh international conference on learning representa…

学习 MongoDB:打开强大的数据库技术大门

一、基本概念 MongoDB 是一个基于分布式文件存储的文档数据库&#xff0c;由 C 语言编写。它旨在为 Web 应用提供可扩展的高性能数据存储解决方案。 相信MySQL我们非常的熟悉&#xff0c;那么MySQL的表结构与MongoDB的文档结构进行类比的话可能更好理解MongoDB。 MySQL的数据…