oeasy玩py107列表_拷贝_copy_赋值_assignment

简介: 本文深入讲解Python列表的拷贝、赋值与引用机制,通过del操作、切片、id地址及getrefcount等演示,揭示变量间“一改全改”与独立副本的区别,帮助理解列表赋值背后的内存逻辑。

列表_拷贝_copy_赋值_assignment

回忆

  • 上次研究的是del 删除
  • 可以 删除列表项
  • 也可以 删除切片

  • 就像择菜一样

  • 择出去的菜 搁哪儿 了呢?🤔

地址

  • 英雄列表
  • 刘关张
hero_list = ["刘备", "关羽", "张飞"]
print(hero_list)
del hero_list[1:2]
print(hero_list)
  • 帧栈(Frame)上 只能看见 hero_list

  • del 列表切片后
  • 帧栈(Frame)上 还是 只能看见 hero_list
  • 此时列表 还剩 2个列表项
  • 堆对象空间(heap)上 释放了hero_list[1]内存
  • 如果 切片 没被赋给任何对象
  • 也就消失
  • 怎么 存住 被删的切片 呢?

观察

  • 把 被删的切片
  • 赋给 变量 呢?
hero_list = ["刘备", "关羽", "张飞"]
print(hero_list)
selected = hero_list[1:2]
del hero_list[1:2]
print(hero_list)
print(selected)
  • 切完切片之后
  • 将切片信息 赋给 一个新列表变量
  • 这个切片就保留下来了

  • 修改切片
  • 会影响原始列表吗?

修改切片

  • 新切片
  • 有自己的空间
hero_list = ["刘备", "关羽", "张飞"]
print(hero_list)
selected = hero_list[1:2]
del hero_list[1:2]
selected.append("赵云")
print(hero_list)
print(selected)
  • 对新切片对象的操作
  • 不影响原来的切片

  • 那如何 让列表 互相影响 呢?

互相影响

  • 直接 用列表 给 新变量赋值
  • 让clist1、clist2指向同一个地址空间
clist1 = list("oeasy")
clist2 = clist1
clist1.append("?")
clist2.append("!")

  • 为啥clist1、clist2会相互影响?

id

  • 去看看 具体地址
clist1 = list("oeasy")
print(clist1,id(clist1))
clist2 = clist1
print(clist2, id(clist2))
clist1.append("?")
clist2.append("!")
print(id(clist1) == id(clist2))
  • clist1、clist2 引用的是
  • 同一个对象地址
  • 所以
  • 不论 谁append
  • 都会append到 这个地址对应的列表 上

  • 列表 被引用了 几次 呢?

getrefcount

  • getrefcount
  • 可以得到  对象
  • 引用次数
import sys
clist1 = list("oeasy")
print(sys.getrefcount(clist1))
  • 明明是 clist1
  • 1个变量引用

  • 为什么 显示 2个引用 呢?

帮助手册

import sys
help(sys.getrefcount)
  • 每次 getrefcount被调用时
  • 增加 1个引用
  • 所以显示2个

  • 取消引用
  • 被引用数 会减少 吗?

取消引用

clist2 = clist1
print(sys.getrefcount(clist1))
clist2 = []
print(sys.getrefcount(clist1))
del clist1
print(sys.getrefcount(clist1))
  • 这时候 clist2引用 别的地址
  • 那clist1 引用数 就会减1

  • clist1 和 clist2 引用 同一位置
  • 他俩 会一改全改
  • 有什么办法 不要 一改全改 吗?

使用构造函数

  • 新作一个列表
  • 根据 nlist1
  • 造一个 nlist2
nlist1 = [1, 2, 3]
nlist2 = list(nlist1)
print(id(nlist1), id(nlist2))
  • id 不同
  • 对应的空间 也不同

  • 还有 啥方法 可以不影响 原列表 吗?

copy副本

  • 使用list类的 copy方法
clist1 = list("oeasy")
clist2 = clist1.copy()
clist1.append("?")
clist2.append("!")
  • 列表 和 列表的拷贝
  • 引用不同的位置

  • 这 两个列表 地址还相同 吗?

确保

  • 观察 id
clist1 = list("oeasy")
clist2 = clist1.copy()
print(id(clist1))
print(id(clist2))
  • id不同
  • copy后 就新分出 空间

  • 给 原列表 做了个副本

copy

  • 拷贝 就是
  • 建立副本

  • copy这个单词
  • 源于 中世纪时候
  • 手抄本

  • 影响到 后来的
  • 复印机

拷贝

  • 胶片时代
  • 表示胶片的拷贝
  • 制片公司的产品 是 拷贝

  • 到了 电脑时代
  • 复制文件的命令
  • 就是c(o)p(y)

  • copy函数 可以制作副本(copy)

总结🤔

  • 列表 赋值运算 两种形式
  1. 将列表 直接 赋值
  • 造成两个列表指向同一个对象
  • 一改全改
  1. 将 列表副本 赋给 变量
  • 这两个列表变量指向不同的对象
  • 互不影响
clist1 = list("oeasy")
clist2 = clist1
clist2 = clist1.copy()

  • 列表 能相加 吗?🤔
lst1 + lst2
  • 下次再说 👋
相关文章
|
25天前
|
机器人 数据挖掘 API
一个销售数据分析机器人的诞生:看 Dify 如何在 DMS 助力下实现自动化闭环
Dify 作为一款低代码 AI 应用开发平台,凭借其直观的可视化工作流编排能力,极大降低了大模型应用的开发门槛。
369 22
一个销售数据分析机器人的诞生:看 Dify 如何在 DMS 助力下实现自动化闭环
|
18天前
|
存储 SQL 分布式计算
手把手教你搞定大数据上云:数据迁移的全流程解析
本文深入探讨了企业数据迁移的核心价值与复杂挑战,重点分析了离线大数据平台在物理传输、系统耦合与数据校验三方面的难题。文章系统阐述了存储格式、表格式、计算引擎等关键技术原理,并结合LHM等工具介绍了自动化迁移的实践演进,展望了未来智能化、闭环化的数据流动方向。
367 14
手把手教你搞定大数据上云:数据迁移的全流程解析
|
12天前
|
传感器 数据采集 算法
LET数据集来魔搭了!开源首批超60,000分钟全尺寸人形机器人真机数据
国内最大全尺寸人形机器人真机数据集“LET数据集”正式发布,首批开源超6万分钟高质量数据,覆盖6大真实场景,支持多模态融合与标准化应用,助力具身智能研发,已在魔搭社区开放共享。
120 1
LET数据集来魔搭了!开源首批超60,000分钟全尺寸人形机器人真机数据
|
2月前
|
人工智能 安全 API
近期 AI 领域的新发布所带来的启示
2024 年以来,AI 基础设施的快速发展过程中,PaaS 层的 AI 网关是变化最明显的基建之一。从传统网关的静态规则和简单路由开始,网关的作用被不断拉伸。用户通过使用网关来实现多模型的流量调度、智能路由、Agent 和 MCP 服务管理、AI 治理等,试图让系统更灵活、更可控、更可用。国庆期间 AI 界发布/升级了一些产品,我们在此做一个简报,从中窥探下对 AI 网关演进新方向的启示。
385 35
|
18天前
|
存储 数据采集 监控
分钟级定位 IO 瓶颈:多租户云环境下的智能诊断
阿里云推出IO一键诊断功能,智能识别IO延迟高、流量异常等问题,通过动态阈值与多指标关联分析,实现秒级异常发现与根因定位,提升云环境存储性能问题解决效率。
169 12
分钟级定位 IO 瓶颈:多租户云环境下的智能诊断
|
8月前
|
人工智能 Python
[oeasy]python082_变量部分总结_variable_summary
本文介绍了变量的定义、声明、赋值及删除操作,以及Python中的命名规则和常见数据类型。通过示例讲解了字符串与整型的基本用法、类型转换方法和加法运算的区别。此外,还涉及异常处理(try-except)、模块导入(如math和random)及随机数生成等内容。最后总结了实验要点,包括捕获异常、进制转化、变量类型及其相互转换,并简述了编程中AI辅助的应用策略,强调明确目标、分步实施和逐步巩固的重要性。更多资源可在蓝桥、GitHub和Gitee获取。
285 97
|
1月前
|
人工智能 前端开发 UED
PPT大纲生成的AI魔法:3小时工作3分钟搞定,但重点不是效率
本文从反常识角度切入,通过三个场景案例,阐述AI大纲生成工具的真正价值不在于效率提升,而在于帮助使用者建立结构化思维模式。文章提供完整的AI指令和系统的使用进阶指南。
355 9
PPT大纲生成的AI魔法:3小时工作3分钟搞定,但重点不是效率
|
18天前
|
存储 安全 Java
微服务安全之Token机制:从认证到授权的深度实践指南
本文深入解析微服务架构下Token认证与授权机制,涵盖JWT、OAuth2.0核心原理,结合Spring Boot实战代码,详解Token生成、验证、安全加固及细粒度权限控制,助你构建安全可靠的分布式系统认证体系。
246 2
|
6月前
|
人工智能 索引 Python
[oeasy]python094_使用python控制音符列表_midi_文件制作
本文介绍了如何使用Python控制音符列表制作MIDI文件。首先回顾了列表下标索引(正数和负数)的用法,接着通过`mido`库实现MIDI文件生成。以《两只老虎》为例,详细解析了代码逻辑:定义音高映射、构建旋律列表、创建MIDI文件框架,并将音符插入音轨。还探讨了音符时值与八度扩展的实现方法。最终生成的MIDI文件可通过不同平台播放或编辑。总结中提到,此技术可用于随机生成符合调性的旋律,同时引发对列表其他实际应用的思考。
212 5

热门文章

最新文章