append 方法如何在 python 中工作?

Ire*_*ner 3 python python-2.7

我学习编程语言,一个测验问题和解决方案是这样的:

def foo(x):
   x.append (3)
   x = [8]
   return x

x=[1, 5]
y= foo(x)
print x
print y
Run Code Online (Sandbox Code Playgroud)

为什么打印如下:

[1 5 3 ]
[8]
Run Code Online (Sandbox Code Playgroud)

为什么 x 不等于 8 ?

小智 5

你那里发生了很多事情。那么让我们一步一步来。

x = [1,5] 您正在将 1,5 的列表分配给 x

y=foo(x)您正在调用 foo 并传入 x 并分配从 foo 返回的任何内容

foo在你调用的内部x.append(3)将 3 附加到传入的列表中。

然后设置x = [8]它现在是对局部变量 x 的引用,然后从 foo 最终设置返回y = [8]


Bha*_*Rao 5

其他两个答案很好。我建议你尝试id获取地址。

看下面的例子

def foo(x):
   x.append (3)
   print "global",id(x)
   x = [8]
   print "local ",id(x)
   return x

x=[1, 5]
print "global",id(x)
y= foo(x)
print "global",id(x)
print x
print y
Run Code Online (Sandbox Code Playgroud)

和输出

global 140646798391920
global 140646798391920
local  140646798392928
global 140646798391920
[1, 5, 3]
[8]
Run Code Online (Sandbox Code Playgroud)

如您所见,变量的地址x在您操作它时保持不变,但在您使用=. 函数内部的变量赋值使变量局部于函数