我正在准备python3考试,遇到了这个问题:
- 给定以下代码片段:*
def my_function(my_list_1):
print("Print #1:", my_list_1)
print("Print #2:", my_list_2)
del my_list_1[0] # Pay attention to this line.
print("Print #3:", my_list_1)
print("Print #4:", my_list_2)
my_list_2 = [2, 3]
my_function(my_list_2)
print("Print #5:", my_list_2)
- 解释输出#3-#5:*
Print #1: [2, 3]
Print #2: [2, 3]
Print #3: [3]
Print #4: [3]
Print #5: [3]
我对这些问题有点困惑:
- python是如何知道“my_function”
def
代码块中的“my_list_2”是谁的?
1.假设我将最后3行代码从my_list_2=[2,3]
更改为pluto=[2,3]
:
pluto = [2, 3]
my_function(pluto)
print("Print #5:", pluto)
这将生成一个NameError,我认为这是有意义的--那么它为什么不在初始代码中抛出一个Error呢?
1.在def
块内,my_list_2
的 Print #4 如何反映应用于my_list_1
的更改?
2条答案
按热度按时间mznpcxlj1#
是一个变量,所以它可以在你的函数中访问,在python中叫做
LEGB
,你可以在here中读到它。python中的
list
是一个可变的变量类型,当你把my_list_2
作为参数传递给你的函数时,如果你对它做了任何改变,它就会应用到你的整个代码中,因为它是可变的,所以它的改变会发生在适当的地方。brgchamk2#
当你把list作为一个参数时,解释器会把链接放到对象“list”上。
所以如果你打电话
修改传递的实际列表,结果是my_list_1和my_list_2列表都与同一个对象相关,您可以看到一个被删除的元素。
另一种代码表示为: