python的列表、元组、深拷贝、浅拷贝(四)

news2025/2/11 14:20:59

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) 增加列表的内容
  1. 一次追加多个元素
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]
  1. 在列表开头添加
list2 = [1, 2, 3]
list2.insert(0,"cat")
print(list2)

输出结果: ['cat', 1, 2, 3]
  1. 在指定索引前面加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) 删除列表中某元素
  1. 根据索引删除
li = [1,2,3]
delete_num = li.pop(1)   #若不写索引值,默认为最后一个
print("删除的元素是:",delete_num)  # 删除的元素是: 2
print(li)  #[1, 3]
  1. 根据valuse值删除
li = [1,2,3]
li.remove(1)
print(li)  #[2, 3]
  1. 全部清空
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}")
                break
        else:
            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 =0
        print("IP\t\t\thostname\t\tidc")
        for host in hosts:
            count += 1
            print(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. 结论

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.10作业

思维导图 C C语言

【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)

目录 一、引言 二、MMoE&#xff08;Multi-gate Mixture-of-Experts&#xff0c;多门混合专家网络&#xff09; 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、报错情况 下载&#xff1a;https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle 用idea打开&#xff0c;启动&#xff1a; 日志有报错&#xff1a; 点右侧m图标&#xff0c;maven有以下报误 &…

C# OpenCV机器视觉:对位贴合

在热闹非凡的手机维修街上&#xff0c;阿强开了一家小小的手机贴膜店。每天看着顾客们自己贴膜贴得歪歪扭扭&#xff0c;不是膜的边缘贴不整齐&#xff0c;就是里面充满了气泡&#xff0c;阿强心里就想&#xff1a;“要是我能有个自动贴膜的神器&#xff0c;那该多好啊&#xf…

Baumer工业相机堡盟相机的相机传感器芯片清洁指南

Baumer工业相机堡盟相机的相机传感器芯片清洁指南 Baumer工业相机1.Baumer工业相机传感器芯片清洁工具和清洁剂2.Baumer工业相机传感器芯片清洁步骤2.1、准备步骤2.2、清洁过程1.定位清洁工具2.清洁传感器3&#xff0e;使用吹风装置 Baumer工业相机传感器芯片清洁的优势设计与结…

《我在技术交流群算命》(三):QML的Button为什么有个蓝框去不掉啊(QtQuick.Controls由Qt5升级到Qt6的异常)

有群友抛出类似以下代码和运行效果截图&#xff1a; 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版本&#xff0c;带来了许多改进、优化和新特性。在Go 1.22发布六个月后&#xff0c;这次更新增强了工具链、运行时和库&#xff0c;同时保持了向后兼容性。 Go 1.23 的新增特性主要包括语言特性、工具链改进、标准库更新等方面&#xff0c;以下…

在 PyTorch 中理解词向量,将单词转换为有用的向量表示

你要是想构建一个大型语言模型&#xff0c;首先得掌握词向量的概念。幸运的是&#xff0c;这个概念很简单&#xff0c;也是本系列文章的一个完美起点。 那么&#xff0c;假设你有一堆单词&#xff0c;它可以只是一个简单的字符串数组。 animals ["cat", "dog…

deepseek API 调用-python

【1】创建 API keys 【2】安装openai SDK pip3 install openai 【3】代码&#xff1a; https://download.csdn.net/download/notfindjob/90343352

Git、Github和Gitee完整讲解:丛基础到进阶功能

第一部分&#xff1a;Git 是什么&#xff1f; 比喻&#xff1a;Git就像是一本“时光机日记本” 每一段代码的改动&#xff0c;Git都会帮你记录下来&#xff0c;像是在写日记。如果出现问题或者想查看之前的版本&#xff0c;Git可以带你“穿越回过去”&#xff0c;找到任意时间…

相对收益-固定收益组合归因-加权久期归因模型

固定收益组合归因-加权久期归因模型和Campisi模型 1 加权久期归因模型--推导方式11.1 债券策略组合收益率的分解1.1.2 加权久期归因&#xff08;1&#xff09;总久期贡献&#xff08;2&#xff09;债券类属配置贡献 1.1.3 如何应用加权久期归因 2 加权久期归因模型--推导方式22…

原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力

原生鸿蒙版小艺APP接入DeepSeek-R1&#xff0c;为HarmonyOS应用开发注入新活力 在科技飞速发展的当下&#xff0c;人工智能与操作系统的融合正深刻改变着我们的数字生活。近日&#xff0c;原生鸿蒙版小艺APP成功接入DeepSeek-R1&#xff0c;这一突破性进展不仅为用户带来了更智…

RabbitMQ 从入门到精通:从工作模式到集群部署实战(三)

文章目录 使用CLI管理RabbitMQrabbitmqctlrabbitmq-queuesrabbitmq-diagnosticsrabbitmq-pluginsrabbitmq-streamsrabbitmq-upgraderabbitmqadmin 使用CLI管理RabbitMQ RabbitMQ CLI 工具需要安装兼容的 Erlang/OTP版本。 这些工具假定系统区域设置为 UTF-8&#xff08;例如en…

傅里叶单像素成像技术研究进展

摘要&#xff1a;计算光学成像&#xff0c;通过光学系统和信号处理的有机结合与联合优化实现特定成像特性的成像系统&#xff0c;摆脱了传统成像系统的限制&#xff0c;为光学成像技术添加了浓墨重彩的一笔&#xff0c;并逐步向简单化与智能化的方向发展。单像素成像(Single-Pi…

MariaDB *MaxScale*实现mysql8读写分离

1.MaxScale 是干什么的&#xff1f; MaxScale是maridb开发的一个mysql数据中间件&#xff0c;其配置简单&#xff0c;能够实现读写分离&#xff0c;并且可以根据主从状态实现写库的自动切换&#xff0c;对多个从服务器能实现负载均衡。 2.MaxScale 实验环境 中间件192.168.12…

计算机毕业设计Spark+大模型知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

padding: 20rpx 0rpx 20rpx 20rpx(上、右、下、左的填充(顺时针方向))

CSS样式 padding: 20rpx 0rpx 20rpx 20rpx; 用于设置元素的填充区域。以下是对每个值的详细解释&#xff1a; 20rpx&#xff08;上边距&#xff09;&#xff1a;设置元素顶部的填充为20rpx。0rpx&#xff08;右边距&#xff09;&#xff1a;设置元素右侧的填充为0rpx。20rpx&a…

微信小程序如何使用decimal计算金额

第三方库地址&#xff1a;GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript 之前都是api接口走后端计算&#xff0c;偶尔发现这个库也不错&#xff0c;计算简单&#xff0c;目前发现比较准确 上代码 导入js import Decimal from ../../uti…

【AI学习】关于 DeepSeek-R1的几个流程图

遇见关于DeepSeek-R1的几个流程图&#xff0c;清晰易懂形象直观&#xff0c;记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》&#xff0c; 文章链接&#xff1a;https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…

C++模板编程——typelist的实现

文章最后给出了汇总的代码&#xff0c;可直接运行 1. typelist是什么 typelist是一种用来操作类型的容器。和我们所熟知的vector、list、deque类似&#xff0c;只不过typelist存储的不是变量&#xff0c;而是类型。 typelist简单来说就是一个类型容器&#xff0c;能够提供一…