python的列表、元组、深拷贝、浅拷贝(四)
python的列表
- 一、序列
- 1. 序列定义
- 2. 序列数据类型包括
- 3.特点:都支持下面的特性
- 二、 列表
- 1. 列表的创建
- 2. 列表的基本特性
- (1) 连接操作符喝重复操作符
- (2) 成员操作符(in , not in )
- (3) 索引
- (4) 切片
- 练习
- (5) for循环
- 3. 列表的常用方法
- (1) 一次添加一个元素
- (2) 增加列表的内容
- (3) 修改列表内容:通过索引和切片重新赋值的方式
- (4) 查看:通过索引和切片查看元素
- (5) 删除列表中某元素
- 4. 列表的翻转,排序,拷贝功能
- 三、元组tuple的操作(戴了紧箍咒的列表,不能修改元素)
- 1. 元组的创建
- 2. 元组的特性
- 3. 常用方法
- 四、 命名元组的使用
- 练习
- 五、地址引用和深拷贝和潜拷贝
- 1. 数据类型分类
- 2. 值得引用
- 3. 潜拷贝
- 4. 深拷贝
- 如果列表的元素包含可变数据类型(可增删改:list) ,一定要用深拷贝!!!!
- 5. 浅拷贝与深拷贝的区别
- 6. 结论
一、序列
1. 序列定义
- 成员有序排列的,且可以通过下标偏移量访问到它的一个或者几个成员,这类类型统称为序列
2. 序列数据类型包括
- 字符串,列表,元组
3.特点:都支持下面的特性
- 索引和切片操作符
- 成员关系操作符(in,not in)
- 连接操作符(+)和重复操作符(*)
二、 列表
1. 列表的创建
li = []
print(li, type(li))
2. 列表的基本特性
(1) 连接操作符喝重复操作符
print([1,2] + [2,3]) #输出[1, 2, 2, 4]
print([1,2] * 3) #输出[1, 2, 1, 2, 1, 2]
(2) 成员操作符(in , not in )
print(1 in [1,2,3]) #输出True
print(1 in ["a", True, [1,2]]) #输出True. 原因:在布尔类型里面,True为1,False为0,此处将1=True
print("z" in ["a", True, [1,2,"z"]]) #输出False
split’,'[172,25,254,100]
(3) 索引
li = [1,2,3,[1,"b",3]]
print(li[0]) #输出1
print(li[-1]) #输出[1,"b",3]
print(li[-1][0]) #输出1
print(li[3][-1]) #输出3
(4) 切片
li =['172','25','254','100']
print(li[:3]) #['172', '25', '254']
print(li[1:]) #['25', '254', '100']
print(li[::-1]) #倒着输出['100', '254', '25', '172']
练习
# 需求:已知列表list =['172','25','254','100'],请输出“100-254-25”
print('-'.join(li[-3:0:-1]))
print('-'.join(li[:0:-1]))
print('-'.join((li[1:][::-1])))
(5) for循环
names = ["粉丝", "粉条", "粉带"]
for name in names:print(f"猫猫叫:{name}" )
3. 列表的常用方法
(1) 一次添加一个元素
li = [1, 2, 3]
li.append(4)
print(li)
输出结果: [1, 2, 3, 4]
(2) 增加列表的内容
- 一次追加多个元素
li = [1, 2, 3]
li.append([4,5,6])
print(li)输出结果: [1, 2, 3, [4, 5, 6]]
list1 = [1, 2, 3]
list1.extend([4,5,6])
print(list1)输出结果: [1, 2, 3, 4, 5, 6]
- 在列表开头添加
list2 = [1, 2, 3]
list2.insert(0,"cat")
print(list2)输出结果: ['cat', 1, 2, 3]
- 在指定索引前面加dog
list3 = [1, 2, 3]
list3.insert(2,"dog")
print(list3)输出结果: [1, 2, 'dog', 3]
(3) 修改列表内容:通过索引和切片重新赋值的方式
list = [1, 2, 3]
list[0] = "cat" #通过索引的方式修改
list[-1] = "dog"
print(list)list[:2] = ["pink","black"] #通过切片的方式修改
print(list)输出结果:
['cat', 2, 'dog']
['pink', 'black', 'dog']
(4) 查看:通过索引和切片查看元素
原理:查看索引值和出现的次数
li =[1,2,3,1,1,2,3]
print(li.count(1)) #计算1出现了几次
print(li.index(2)) #查找2第一次出现时的索引值
(5) 删除列表中某元素
- 根据索引删除
li = [1,2,3]
delete_num = li.pop(1) #若不写索引值,默认为最后一个
print("删除的元素是:",delete_num) # 删除的元素是: 2
print(li) #[1, 3]
- 根据valuse值删除
li = [1,2,3]
li.remove(1)
print(li) #[2, 3]
- 全部清空
li = [1,2,3]
li.clear()
print(li) #输出 []
4. 列表的翻转,排序,拷贝功能
li = [18,6,56,32]
li.reverse() #类似于 [::-1],具有反转的功能
print(li) #[32, 56, 6, 18]#sort排序默认由小到大,如果想由大到小排序,需设置reverse=true
li.sort(reverse=True) #按照由大到小排列
print(li) #[6, 18, 32, 56]#拷贝
li1 = li.copy()
print(id(li),id(li1)) #打印内存信息
print(li,li1)
三、元组tuple的操作(戴了紧箍咒的列表,不能修改元素)
1. 元组的创建
>>> t1 =() #空元组
>>> print(t1,type(t1))
() <class 'tuple'>>>> t1 =(1)
>>> print(t1,type(t1)) # 只有单个元素不是元组
1 <class 'int'>>>> t1 =(1,)
>>> print(t1,type(t1)) #元组只有一个元素的时候一定要加逗号
(1,) <class 'tuple'>>>> t1 =(1,1.2,True,[1,1,3])
>>> print(t1,type(t1))
(1, 1.2, True, [1, 1, 3]) <class 'tuple'>
2. 元组的特性
拼接
>>> print((1,2,3)+(1,))
(1, 2, 3, 1)
>>> print((1,2,3)*5)
(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
>>> print(1 in (1,2,3))
True
>>> t = (1,2,3,4)
>>> print(t[0])
1
>>> print(t[-1])
4
>>> print(t[::-1])
(4, 3, 2, 1)
>>> print(t[:2])
(1, 2)
>>> print(t[1:])
(2, 3, 4)
>>>
3. 常用方法
元组是不可变数据类型,不能增删改,只能查看
# 通过索引和切片查看元素
>>> t=(1,2,3,1,1,3)
>>> print(t.count(3))
2
>>> print(t.index(3))
2
四、 命名元组的使用
# 从collections模块导入namedtuple工具
from collections import namedtuple
#创建命名元组User
User = namedtuple('User', ("name", "age", "city"))
#给命名元组传值
user1 = User("westos", 18, "西安")
#打印命名元组
print(user1)
#获取命名元组指定的信息
print(user1.name)
print(user1.age)
print(user1.age)
练习
from collections import namedtuple
menu = """云主机管理系统1). 添加云主机(IP,hostname,IDC)2). 搜索云主机(IP搜索)3). 删除云主机4). 云主机列表5). 退出系统
请输入你的选择:"""hosts = []
Host =namedtuple('Host', ('ip', 'hostname', 'idc'))
while True:choice = input(menu)if choice == "1":print("添加云主机".center(50, '*'))ip = input("请输入IP地址:")hostname = input("请输入正确的主机名:")idc = input("请输入idc(eg:ali,huawei...)名称:")Host1 = Host(ip, hostname, idc)hosts.append(Host1)print(f"添加{idc}的云主机成功,IP地址为{ip}")elif choice == "2":print("搜索云主机".center(50, '*'))ip = input("请输入需要搜索的主机IP:")for host in hosts:if ip == host.ip:print(f"{host.ip}\t{host.hostname}\t{host.idc}")breakelse:print("请输入正确的IP地址")elif choice == '3':print("删除云主机".center(50, "*"))ip = input("请输入需要删除的主机IP:")for host in hosts:if ip == host.ip:hosts.remove(host)elif choice == "4":print("云主机列表".center(50, '*'))count =0print("IP\t\t\thostname\t\tidc")for host in hosts:count += 1print(f'{host.ip}\t\t{host.hostname}\t\t\t{host.idc}')print("主机总个数为:", count)elif choice == '5':print("系统正在退出,欢迎下次使用....")exit()else:print("请输入正确的选项")
五、地址引用和深拷贝和潜拷贝
1. 数据类型分类
- 不可变数据类型: 数值,字符串str,tuple,nametuple
- 可变数据类型(可增删改) :list
2. 值得引用
- nums1和nums2指向同一个内存空间(=)
nums1 = [1, 2, 3]
nums2 = nums1
nums1.append(4)
print(nums2) #结果输出为[1, 2, 3, 4]
3. 潜拷贝
- 对内存地址的拷贝,n1 n2指向同一个内存地址,修改n1会影响n2(li.copy(),copy.copy)
n1 = [1, 2, 3]
n2 =n1.copy() #n1.copy()和n1[:]都可以实现拷贝
print(id(n1), id(n2)) #1879038751488 1879038753920
n1.append(4)
print(n2) #[1, 2, 3]潜拷贝:n1 = [1, 2, [1, 2]]
n2 = n1.copy()
n1[-1].append(4)
print(n2)
print(id(n1), id(n2))
print(id(n1[-1]), id(n2[-1]))输出结果:
[1, 2, [1, 2, 4]]
2981595640768 2981595640576
2981595640704 2981595640704
4. 深拷贝
如果列表的元素包含可变数据类型(可增删改:list) ,一定要用深拷贝!!!!
- 拷贝另外一个变量的值,n1 n2的内存地址不同,修改n1并不会影响n2(copy.deepcopy())
import copy
n1 = [1, 2, [1, 2]]
n2 = copy.deepcopy(n1)
n1[-1].append(4)
print(id(n1), id(n2))
print(id(n1[-1]), id(n2[-1]))
print(n2)
输出:2350387450944 2350388443776
2350387805824 2350388443136
[1, 2, [1, 2]]
5. 浅拷贝与深拷贝的区别
最根本的区别在于是否真正获取一个对象的复制实体,而不是引用
假设B复制了A,修改A的时候,看B是否发生变化:
如果B跟着变了,说明是潜拷贝,拿人手短(修改堆内存中的同一个值)
如果B没有改变,说明是深拷贝,自食其力(修改堆内存中的不同的值)
6. 结论

相关文章:
python的列表、元组、深拷贝、浅拷贝(四)
python的列表 一、序列1. 序列定义2. 序列数据类型包括3.特点:都支持下面的特性 二、 列表1. 列表的创建2. 列表的基本特性(1) 连接操作符喝重复操作符(2) 成员操作符(in , not in )(3) 索引(4) 切片练习(5) for循环 3. 列表的常用方法(1) 一…...
2.10作业
思维导图 C C语言...
【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
目录 一、引言 二、MMoE(Multi-gate Mixture-of-Experts,多门混合专家网络) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、…...
RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决
RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决 1、报错情况 下载:https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle 用idea打开,启动: 日志有报错: 点右侧m图标,maven有以下报误 &…...
C# OpenCV机器视觉:对位贴合
在热闹非凡的手机维修街上,阿强开了一家小小的手机贴膜店。每天看着顾客们自己贴膜贴得歪歪扭扭,不是膜的边缘贴不整齐,就是里面充满了气泡,阿强心里就想:“要是我能有个自动贴膜的神器,那该多好啊…...
Baumer工业相机堡盟相机的相机传感器芯片清洁指南
Baumer工业相机堡盟相机的相机传感器芯片清洁指南 Baumer工业相机1.Baumer工业相机传感器芯片清洁工具和清洁剂2.Baumer工业相机传感器芯片清洁步骤2.1、准备步骤2.2、清洁过程1.定位清洁工具2.清洁传感器3.使用吹风装置 Baumer工业相机传感器芯片清洁的优势设计与结…...
SQL 大厂面试题目(由浅入深)
今天给大家带来一份大厂SQL面试覆盖:基础语法 → 复杂查询 → 性能优化 → 架构设计,大家需深入理解执行原理并熟悉实际业务场景的解决方案。 1. 基础查询与过滤 题目:查询 employees 表中所有薪资(salary)大于 10000…...
在Linux上部署Jenkins的详细指南
引言 在当今快速迭代的软件开发环境中,持续集成和持续交付(CI/CD)变得越来越重要。Jenkins作为一个开源自动化服务器,能够帮助开发者更高效地进行代码集成、测试和部署。本文将详细介绍如何在Linux系统上安装和配置Jenkins。 准…...
《我在技术交流群算命》(三):QML的Button为什么有个蓝框去不掉啊(QtQuick.Controls由Qt5升级到Qt6的异常)
有群友抛出类似以下代码和运行效果截图: import QtQuick import QtQuick.ControlsWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")Button{anchors.centerIn: parentwidth: 100height: 40background: Rectangle {color: "red…...
Golang:Go 1.23 版本新特性介绍
流行的编程语言Go已经发布了1.23版本,带来了许多改进、优化和新特性。在Go 1.22发布六个月后,这次更新增强了工具链、运行时和库,同时保持了向后兼容性。 Go 1.23 的新增特性主要包括语言特性、工具链改进、标准库更新等方面,以下…...
在 PyTorch 中理解词向量,将单词转换为有用的向量表示
你要是想构建一个大型语言模型,首先得掌握词向量的概念。幸运的是,这个概念很简单,也是本系列文章的一个完美起点。 那么,假设你有一堆单词,它可以只是一个简单的字符串数组。 animals ["cat", "dog…...
deepseek API 调用-python
【1】创建 API keys 【2】安装openai SDK pip3 install openai 【3】代码: https://download.csdn.net/download/notfindjob/90343352...
PHP中的魔术方法
在 PHP 中,以两个下划线 __ 开头的方法被称为魔术方法,它们在特定场景下会自动被调用,以下是一些常见的魔术方法: 1.__construct():类的构造函数,在对象创建完成后第一个自动调用,用于执行初始…...
Git、Github和Gitee完整讲解:丛基础到进阶功能
第一部分:Git 是什么? 比喻:Git就像是一本“时光机日记本” 每一段代码的改动,Git都会帮你记录下来,像是在写日记。如果出现问题或者想查看之前的版本,Git可以带你“穿越回过去”,找到任意时间…...
相对收益-固定收益组合归因-加权久期归因模型
固定收益组合归因-加权久期归因模型和Campisi模型 1 加权久期归因模型--推导方式11.1 债券策略组合收益率的分解1.1.2 加权久期归因(1)总久期贡献(2)债券类属配置贡献 1.1.3 如何应用加权久期归因 2 加权久期归因模型--推导方式22…...
原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力 在科技飞速发展的当下,人工智能与操作系统的融合正深刻改变着我们的数字生活。近日,原生鸿蒙版小艺APP成功接入DeepSeek-R1,这一突破性进展不仅为用户带来了更智…...
RabbitMQ 从入门到精通:从工作模式到集群部署实战(三)
文章目录 使用CLI管理RabbitMQrabbitmqctlrabbitmq-queuesrabbitmq-diagnosticsrabbitmq-pluginsrabbitmq-streamsrabbitmq-upgraderabbitmqadmin 使用CLI管理RabbitMQ RabbitMQ CLI 工具需要安装兼容的 Erlang/OTP版本。 这些工具假定系统区域设置为 UTF-8(例如en…...
AI-学习路线图-PyTorch-我是土堆
1 需求 PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili PyTorch 深度学习快速入门教程 配套资源 链接 视频教程 https://www.bilibili.com/video/BV1hE411t7RN/ 文字教程 https://blog.csdn.net/xiaotudui…...
2.1 Mockito核心API详解
Mockito核心API详解 1. 创建Mock对象 Mockito提供两种方式创建模拟对象: 1.1 手动创建(传统方式) // 创建接口/类的Mock对象 UserDao userDao Mockito.mock(UserDao.class);1.2 注解驱动(推荐方式) 结合JUnit 5的…...
傅里叶单像素成像技术研究进展
摘要:计算光学成像,通过光学系统和信号处理的有机结合与联合优化实现特定成像特性的成像系统,摆脱了传统成像系统的限制,为光学成像技术添加了浓墨重彩的一笔,并逐步向简单化与智能化的方向发展。单像素成像(Single-Pi…...
可视化工作流编排参数配置完整方案设计文档
一、背景及需求分析 1. 背景 在复杂的工作流程中,后续程序需要动态构造输入参数,这些参数源自多个前序程序的 JSON 数据输出。为了增强系统的灵活性和可扩展性,配置文件需要支持以下功能: 灵活映射前序程序的 JSON 数据。…...
镜头放大倍率和像素之间的关系
相互独立的特性 镜头放大倍率:主要取决于镜头的光学设计和结构,决定了镜头对物体成像时的缩放程度,与镜头的焦距等因素密切相关。比如,微距镜头具有较高的放大倍率,能将微小物体如昆虫、花朵细节等放大成像࿰…...
MariaDB *MaxScale*实现mysql8读写分离
1.MaxScale 是干什么的? MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡。 2.MaxScale 实验环境 中间件192.168.12…...
计算机毕业设计Spark+大模型知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
MySQL的事务实现原理和隔离级别?
目录 MySQL 事务实现原理 1. 事务的基本概念 2. 实现原理 日志系统 锁机制 MySQL 隔离级别 1. 隔离级别概述 2. 各隔离级别详解 读未提交(Read Uncommitted) 读已提交(Read Committed) 可重复读(Repeatable Read) 串行化(Serializable) 3. 设置隔离级别 My…...
JVM做GC垃圾回收时需要多久,都由哪些因素决定的
JVM进行垃圾回收(GC)的时间长短受多种因素影响,主要包括以下几个方面: 1. 堆内存大小 堆内存越大,GC需要扫描和回收的对象越多,耗时越长。堆内存较小时,GC频率增加,但每次回收的时…...
padding: 20rpx 0rpx 20rpx 20rpx(上、右、下、左的填充(顺时针方向))
CSS样式 padding: 20rpx 0rpx 20rpx 20rpx; 用于设置元素的填充区域。以下是对每个值的详细解释: 20rpx(上边距):设置元素顶部的填充为20rpx。0rpx(右边距):设置元素右侧的填充为0rpx。20rpx&a…...
2025-2-10-4.4 双指针(基础题1)
文章目录 4.4 双指针(基础题)**344. 反转字符串****125. 验证回文串****1750. 删除字符串两端相同字符后的最短长度****167.两数之和 II - 输入有序数组****2105. 给植物浇水 II****977. 有序数组的平方****658. 找到K个最接近的元素****1471. 数组中的k…...
Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)
效果:由于录制软件导致exe显示不正常,实际运行没有任何问题。 说明:exe试用下载(提取码: 4d8y )...
微信小程序如何使用decimal计算金额
第三方库地址:GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript 之前都是api接口走后端计算,偶尔发现这个库也不错,计算简单,目前发现比较准确 上代码 导入js import Decimal from ../../uti…...
