Python 中的 arr 和 arr[:] 有什么区别?

har*_*rry 0 python list python-3.x

我想知道列表变量本身和后跟 [:] 的列表变量之间的区别

例如,

# When nums are List[int] and res are List,
# what is the difference between
res.append(nums[:])
# and 
res.append(nums)
Run Code Online (Sandbox Code Playgroud)

我在实现递归置换函数时提出了我的问题

# When nums are List[int] and res are List,
# what is the difference between
res.append(nums[:])
# and 
res.append(nums)
Run Code Online (Sandbox Code Playgroud)

提前感谢您的帮助!

Mit*_*lin 5

nums[:]是一种在 python 中制作列表浅拷贝的便捷方法。res.append(nums)附加对 的引用nums,即对 的任何更改nums也将反映在 中resres.append(nums[:])将创建一个新副本nums,您可以更改其中的所有内容,而无需更改原始副本nums

希望这个例子能说明白

nums = [1, 2, 3]
res = [nums]
res[0][0] = 'banana'
print(nums)

nums = [1, 2, 3]
res = [nums[:]]
res[0][0] = 'banana'
print(nums)
Run Code Online (Sandbox Code Playgroud)

给出输出

['香蕉', 2, 3]
[1, 2, 3]