跳到主要内容

Python中List作为参数是怎么传递的?

参考答案:

在Python中,当你将一个列表(List)作为参数传递给一个函数时,你实际上是在传递这个列表的引用,而不是整个列表的副本。这意味着如果你在函数内部修改了列表,那么原始的列表也会被修改。这是因为Python中的对象(包括列表)是通过引用传递的,而不是通过值传递的。

以下是一个示例,演示了如何在函数内部修改列表,并影响原始的列表:

def modify_list(my_list):
    my_list.append(4)  # 修改列表
    return my_list

original_list = [1, 2, 3]
modified_list = modify_list(original_list)

print(original_list)  # 输出: [1, 2, 3, 4]
print(modified_list)  # 输出: [1, 2, 3, 4]

在这个例子中,modify_list函数接收一个列表作为参数,然后在列表的末尾添加了一个新元素。因为这个列表是通过引用传递的,所以原始的original_list也被修改了。因此,当你打印original_listmodified_list时,你会看到它们都是相同的,并且都包含了新添加的元素4。

需要注意的是,尽管列表本身是通过引用传递的,但如果你创建一个新的列表并将它赋值给函数内部的参数,那么这个新的列表并不会影响原始的列表。这是因为在这个情况下,你实际上是创建了一个新的列表对象,并将其赋值给了参数,而不是修改原始的列表对象。例如:

def create_new_list(my_list):
    my_list = [5, 6, 7]  # 创建一个新的列表并赋值给参数
    return my_list

original_list = [1, 2, 3]
new_list = create_new_list(original_list)

print(original_list)  # 输出: [1, 2, 3]
print(new_list)        # 输出: [5, 6, 7]

在这个例子中,create_new_list函数创建了一个新的列表[5, 6, 7],并将其赋值给了参数my_list。这个新的列表并不会影响原始的original_list,因为my_list现在引用了一个新的列表对象。因此,当你打印original_listnew_list时,你会看到它们是不同的,并且original_list并没有被修改。