总所周知,list作为参数传到函数里面是作为引用传递的。如:
def test(nums1):
nums1.insert(1,1)
nums1=[1,2,3,0,0,0]
test(nums1)
print(nums1)
输出:1,1,2,3,0,0,0
今天发现一个奇怪的现象,list赋值操作并不能作用到对象身上
def test(nums1):
nums2=[2,5,6]
nums1=nums1+nums2
print("1:",nums1)
nums1=[1,2,3,0,0,0]
test(nums1)
print(nums1)
输出:
1: [1, 2, 3, 0, 0, 0, 2, 5, 6]
[1, 2, 3, 0, 0, 0]
但如果操作其中的元素又可行:
def test(nums1):
nums1[1]=3
print("1:",nums1)
nums1=[1,2,3,0,0,0]
test(nums1)
print(nums1)
输出:
1: [1, 3, 3, 0, 0, 0]
[1, 3, 3, 0, 0, 0]
这个地方很容易犯错。更让人摸不着头脑的是下面这个:
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
print(bad_append('one'))
print(bad_append('two'))
按道