![Python中nums[:] = unique的含义与作用详解](https://img.php.cn/upload/article/001/246/273/179464195748800.jpg?x-oss-process=image/resize,p_40)
这行代码通过切片赋值将unique列表的内容复制到原列表nums中,而非简单地让nums指向新对象,从而满足题目要求的“原地修改”约束。
这行代码通过切片赋值将`unique`列表的内容复制到原列表`nums`中,而非简单地让`nums`指向新对象,从而满足题目要求的“原地修改”约束。
在LeetCode第26题“删除有序数组中的重复项”等场景中,函数必须原地修改输入列表(in-place modification),且不能返回新列表——这是关键约束。此时,nums[:] = unique正是实现合规修改的核心技巧。
为什么不能写 nums = unique?
nums = [1, 1, 2] unique = [1, 2] nums = unique # ❌ 错误:仅改变局部变量nums的引用
该操作只是让局部变量 nums 指向 unique 所在的新列表对象,而原始传入的列表对象并未被修改。调用方看到的 nums 仍是旧列表(长度、内容均未变),违反题目“原地修改”要求。
nums[:] = unique 的真正含义
nums[:] 是一个全切片(full slice),它不创建新变量,而是表示 nums 列表的全部元素位置。赋值操作 nums[:] = unique 会:
- 逐个替换
nums中原有元素; - 若
unique更短,则自动截断尾部元素; - 若
unique更长,则自动扩展nums长度; -
保持
nums的内存地址不变(可通过id(nums)验证),确保外部引用仍有效。
✅ 正确示例:
nums = [1, 1, 2, 2, 3] unique = [1, 2, 3] nums[:] = unique print(nums) # [1, 2, 3] print(id(nums)) # 与赋值前相同 → 真正的原地修改
注意事项与最佳实践
- ⚠️
nums[:] = unique要求unique是可迭代对象(如列表、元组),否则抛出TypeError; - ✅ 更简洁的替代方案(如题目允许):使用
del nums[:]+nums.extend(unique),语义更清晰; - ? 在算法题中,若需去重且保持顺序,可进一步优化为双指针法,避免额外空间
O(n)——但本例中unique列表已体现直观逻辑; - ? 切片赋值是Python中少数能“就地批量更新容器内容”的语法之一,类似用法还有
dict.update()、set |= other_set等。
掌握 nums[:] = ... 不仅解决当前问题,更是理解Python对象引用与原地操作的关键一环。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











