全局/内部变量冲突?(python)
很抱歉问了这个愚蠢的问题,我是个新手程序员。但是谁能告诉我为什么下面的程序会这样全局/内部变量冲突?(python),python,variables,Python,Variables,很抱歉问了这个愚蠢的问题,我是个新手程序员。但是谁能告诉我为什么下面的程序会这样 def lol(a): a=[] a.append(1) return a 现在当我这么做的时候 k = [2, 3] lol(k) 它返回1,但k仍然不变?为什么? 非常感谢 在lola中,行a=[]将a绑定到一个新列表。在这一行之后,a不再与k绑定到同一个列表。因此,您在函数中实际修改的是一个新列表,而不是在参数中收到的列表。欲了解更多信息 如果希望k为[1],那么可以这样写: de
def lol(a):
a=[]
a.append(1)
return a
现在当我这么做的时候
k = [2, 3]
lol(k)
它返回1,但k仍然不变?为什么?
非常感谢 在lola中,行a=[]将a绑定到一个新列表。在这一行之后,a不再与k绑定到同一个列表。因此,您在函数中实际修改的是一个新列表,而不是在参数中收到的列表。欲了解更多信息
如果希望k为[1],那么可以这样写:
def lol(a):
a[:] = [1]
return a
k = [2, 3]
lol(k) # now k is equal to [1]
在lola中,行a=[]将a绑定到一个新列表。在这一行之后,a不再与k绑定到同一个列表。因此,您在函数中实际修改的是一个新列表,而不是在参数中收到的列表。欲了解更多信息
如果希望k为[1],那么可以这样写:
def lol(a):
a[:] = [1]
return a
k = [2, 3]
lol(k) # now k is equal to [1]
检查内联注释
def lol(a): # a and k are pointing to same memory location
a=[] # Now, new list is created, pointing to different memory address.
a.append(1)
return a # returning new list
k = [2, 3] # New list k is created
lol(k)
如果您打印k,您将得到[2,3]。lol根本没有更改它。检查内联注释
def lol(a): # a and k are pointing to same memory location
a=[] # Now, new list is created, pointing to different memory address.
a.append(1)
return a # returning new list
k = [2, 3] # New list k is created
lol(k)
如果您打印k,您将得到[2,3]。lol根本没有改变它