我对python很新,我正试图追踪这个简单的程序。我希望提高我查看代码和理解输出的能力。
说实话,我刚刚开始学习蟒蛇入门考试并且在课程中遇到麻烦。如果有人知道他们在过去使用的介绍python的任何好的简明资源也会有很大的帮助。
这是该计划。
def fun(x):
x[0] = 0
x = [4,5,6]
return x
def main():
y = [1,2,3]
z = fun(y)
print("z =",z)
print("y =",y)
main()
基本上我希望有人解释为什么输出是这样的:
z = [4, 5, 6]
y = [0, 2, 3]
答案 0 :(得分:1)
这是一个简单的示例,您可以添加它来跟踪代码的执行情况:
import sys
def tracer(frame, event, arg):
print(event, frame.f_lineno, frame.f_locals)
return tracer
sys.settrace(tracer)
def fun(x):
x[0] = 0
x = [4,5,6]
return x
def main():
y = [1,2,3]
z = fun(y)
print("z =",z)
print("y =",y)
main()
答案 1 :(得分:0)
考虑在Python中分配列表和对象更像是绑定。你没有提到[1,2,3],但是它已经被它约束了。分配给y的其他变量也绑定到列表对象。
因此,您的代码逐步执行的过程如下:
如果您不想修改其他函数中的列表或对象,可以使用copy()和deepcopy()方法创建新对象。即。
fun( y ) # passes [1,2,3] into fun()
fun( y.copy() ) # passes a copy of [1,2,3] into fun()