我有如下方法:
def slice_list(my_list, slice_point):
my_list = my_list[:slice_point]
print("Inside method: ", my_list)
return 我要对它进行如下测试:
if __name__ == "__main__":
my_list = [1,2,3,4,5]
slice_point = 3
slice_list(my_list, slice_point)
print("Outside method: ", my_list)我得到的输出不是我所期望的,因为列表没有最终被编辑。
>>>Inside method: [1, 2, 3]
>>>Outside method: [1, 2, 3, 4, 5]但是,当我对列表执行append时,它确实会永久编辑列表,如下例所示:
def append_to_list(my_list, element):
my_list.append(element)
print("Inside method: ", my_list)
return
if __name__ == "__main__":
my_list = [1,2,3,4,5]
append_to_list(my_list, "new element")
print("Outside method: ", my_list)它提供了以下输出:
>>>Inside method: [1, 2, 3, 4, 5, 'new element']
>>>Outside method: [1, 2, 3, 4, 5, 'new element']为什么切片不永久地改变列表?
发布于 2016-08-04 18:43:38
试一试:
my_list[:] = my_list[:slice_point]旧方法只将名称my_list指向一个新对象,即片返回的副本。
不过,我前面提出的建议修改了my_list最初指向的对象,而没有重新绑定该名称。
https://stackoverflow.com/questions/38775048
复制相似问题