python中的[:]
·
[:] 为一种特殊的切片操作, a[:] 等价于 a[0:len(a)],返回一个新列表,包括原列表a的所有元素的拷贝(浅拷贝)
本文源于自己遇到的一个错误,并且参考豆包的回答
用法:
1, ([:] 在等号后 )创建列表的副本。在函数体使用,用于临时计算,或者保护函数的列表形式的入参不被改变。
ori = [10, 30, 20, 40]
temp = ori[:]
temp.sort(reverse = True)
temp
[40, 30, 20, 10]
temp.sort()
temp
[10, 20, 30, 40]
ori
[10, 30, 20, 40]
2, ([:] 在等号前 )清空列表并替代元素,用于原地修改列表
nums = [1, 2, 3]
nums[:] = [4, 5, 6] # 清空原列表,替换为 [4,5,6]
print(nums) # [4, 5, 6]
这种用法是区别 nums1 = nums2 直接赋值语句的。nums1 = nums2 仅创建引用,nums1 是nums2 列表的别名,二者指向同一列表,但是一旦命名空间作用域变化,就会引起没想到的错误
class Solution:
def merge(self, nums1: list[int], m: int, nums2: list[int], n: int) -> list[int]:
"""
Do not return anything, modify nums1 in-place instead.
"""
combined = []
p1 = 0
p2 = 0
while p1 < m or p2 < n:
if p1 == m:
combined.append(nums2[p2])
p2 += 1
elif p2 == n:
combined.append(nums1[p1])
p1 += 1
else:
if nums1[p1] <= nums2[p2]:
combined.append(nums1[p1])
p1 += 1
else:
combined.append(nums2[p2])
p2 += 1
nums1 = combined
# nums1[:] = combined # 清空列表并替换元素
return combined
if __name__ == '__main__':
s = Solution()
nums1 = [1, 2, 3, 7]
nums2 = [2, 5, 6, 8]
m = 4
n = 4
print(nums1)
print(nums2)
# nums1 = s.merge(nums1, m, nums2, n)
print(s.merge(nums1, m, nums2, n))
print(nums1)
print(nums2)
其输出是
/usr/local/bin/python3.13 /Volumes/CommonDisk/xgshi/Study/PycharmProjects/try1/Leetcode/CombineArray.py
[1, 2, 3, 7]
[2, 5, 6, 8]
[1, 2, 2, 3, 5, 6, 7, 8]
[1, 2, 3, 7]
[2, 5, 6, 8]
进程已结束,退出代码为 0
而一旦改为 nums1[:] = combined, 结果就正确了
/usr/local/bin/python3.13 /Volumes/CommonDisk/xgshi/Study/PycharmProjects/try1/Leetcode/CombineArray.py
[1, 2, 3, 7]
[2, 5, 6, 8]
[1, 2, 2, 3, 5, 6, 7, 8]
[1, 2, 2, 3, 5, 6, 7, 8]
[2, 5, 6, 8]
进程已结束,退出代码为 0
注意:浅拷贝的局限性
nums1[:] 是浅拷贝,若列表中包含嵌套的可变对象(如子列表、字典等),则拷贝的是子对象的引用,而非子对象本身。修改子对象会影响原列表:
nums1 = [1, [2,3], 4]
nums2 = nums1[:]
nums2[1][0] = 5
nums1
[1, [5, 3], 4]
nums2
[1, [5, 3], 4]
若需完全独立的拷贝(深拷贝),需使用 copy 模块的 deepcopy 函数。
总结
nums1[:] 的核心作用是获取列表的全部元素副本,主要用于:
- 安全地操作列表而不影响原数据;
- 原地修改列表内容(通过
nums1[:] = ...); - 避免函数调用时对输入列表的意外修改。
它与直接赋值(nums2 = nums1)的本质区别是:前者创建新列表,后者仅创建引用。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)