当前位置: 首页 > news >正文

Python 变量赋值与切片语法(in-place 修改 vs 重新赋值)

这是一个非常经典的 Python 变量赋值与切片语法问题。虽然这两行代码看起来“效果相似”,但它们的底层语义是不同的

重点区别在于是否修改原列表 nums1 的内存对象(in-place 修改 vs 重新赋值)。


✅ 两句代码分别是什么意思?

nums1[:] = sorted_list

这是“原地修改”(in-place modification)

  • nums1[:] 表示对原列表的所有元素进行切片操作(整个列表);
  • nums1[:] = ... 会把原来的列表内容就地替换sorted_list 中的内容;
  • 不会改变 nums1 本身的引用地址
  • ✅ 通常用于在函数中更新“传进来的列表”,让调用者能感知到修改。
nums1 = [1, 2, 3]
sorted_list = [4, 5, 6]
nums1[:] = sorted_list
print(nums1)  # [4, 5, 6]
  • 内存地址不变:
id_before = id(nums1)
nums1[:] = sorted_list
id_after = id(nums1)
print(id_before == id_after)  # True ✅

nums1 = sorted_list[:]

这是“重新赋值”(rebinding)

  • sorted_list[:] 是一个 sorted_list浅拷贝
  • 然后用 nums1 = ...nums1 指向了新列表
  • ❌ 不会影响原来的 nums1 对象(原列表的内存地址变了);
  • 原本指向 nums1 的其他变量或引用会失效。
nums1 = [1, 2, 3]
sorted_list = [4, 5, 6]
nums1 = sorted_list[:]
print(nums1)  # [4, 5, 6]
  • 地址发生变化:
nums1 = [1, 2, 3]
id_before = id(nums1)
nums1 = [4, 5, 6][:]
id_after = id(nums1)
print(id_before == id_after)  # False ❌

🧪 举个更明确的例子

def update_list(nums1, sorted_list):nums1[:] = sorted_lista = [1, 2, 3]
b = [9, 9, 9]
update_list(a, b)
print(a)  # [9, 9, 9] ✅ 被修改了

vs

def update_list(nums1, sorted_list):nums1 = sorted_list[:]a = [1, 2, 3]
b = [9, 9, 9]
update_list(a, b)
print(a)  # [1, 2, 3] ❌ 没有变化

🧠 总结对比

写法

是否修改原列表

是否保留引用地址

用途

nums1[:] = sorted_list

✅ 是(就地修改)

✅ 是

改变传入列表的内容

nums1 = sorted_list[:]

❌ 否(创建新列表)

❌ 否

创建新的副本或重新赋值变量


✅ 什么时候用哪一个?

  • 如果你想更新一个传入的列表变量,让外部变量感知到,nums1[:] = ...
  • 如果你想让 nums1 拿到一份新的拷贝,和旧的 nums1 无关,nums1 = ...[:]

文章转载自:
http://premonitory .pzdurr.cn
http://rafter .pzdurr.cn
http://swagger .pzdurr.cn
http://enigmatic .pzdurr.cn
http://we .pzdurr.cn
http://venue .pzdurr.cn
http://almirah .pzdurr.cn
http://azof .pzdurr.cn
http://anthropopathy .pzdurr.cn
http://peruse .pzdurr.cn
http://hyperbolise .pzdurr.cn
http://copious .pzdurr.cn
http://primate .pzdurr.cn
http://podsolisation .pzdurr.cn
http://exteroceptive .pzdurr.cn
http://exhumation .pzdurr.cn
http://ninepenny .pzdurr.cn
http://preimplantation .pzdurr.cn
http://reapportion .pzdurr.cn
http://katrine .pzdurr.cn
http://uricase .pzdurr.cn
http://bdtr .pzdurr.cn
http://yes .pzdurr.cn
http://matriclinous .pzdurr.cn
http://desecrate .pzdurr.cn
http://rawhide .pzdurr.cn
http://faxes .pzdurr.cn
http://computus .pzdurr.cn
http://cricothyroid .pzdurr.cn
http://alder .pzdurr.cn
http://www.dtcms.com/a/290866.html

相关文章:

  • 《画布角色的双重灵魂:解析Canvas小游戏中动画与碰撞的共生逻辑》
  • 状压DP学习笔记[浅谈]
  • 计算机网络:概述层---计算机网络的性能指标
  • IFN影视官网入口 - 4K影视在线看网站|网页|打不开|下载
  • 算法训练营DAY37 第九章 动态规划 part05
  • Linux开发⊂嵌入式开发
  • 复制docker根目录遇到的权限问题
  • Mac安装Typescript报错
  • macOS 上安装 Kubernetes(k8s)
  • 深度学习-常用环境配置
  • 基于R语言的分位数回归技术应用
  • next.js刷新页面时二级菜单展开状态判断
  • Java 通过 HttpURLConnection发送 http 请求
  • CG-04 翻斗式雨量传感器 分辨率0.1mm,0.2mm可选择 金属材质
  • 数据结构自学Day11-- 排序算法
  • 使用 Longformer-base-4096 进行工单问题分类
  • Redis进阶--缓存
  • Ubuntu 22.04 安装 MySQL 8.0 完整步骤文档
  • 计算机网络中:传输层和网络层之间是如何配合的
  • 7月21日星期一今日早报简报微语报早读
  • 计算机史前时代:从原始计数到机械曙光
  • 计算机发展史:集成电路时代的微缩革命
  • Android 实例 - 分页器封装实现(上一页按钮、下一页按钮、当前页码 / 总页数、每页条数、总记录数)
  • 本地部署AI新选择!LocalAI+cpolar轻松实现隐私安全的远程访问
  • 数据结构:找出字符串中重复的字符(Finding Duplicates in a String)——使用哈希表
  • 一文彻底解释清楚Java 中的NIO、BIO和AIO
  • 记录解决问题--maven本地已有依赖,还是去远程仓库下载,导致打包失败
  • 期权到期会对大盘有什么影响?
  • 本地Linux服务器使用Docker快速部署SyncTV
  • 关于Aop动态代理