Discuss / Python / 疑惑待解答

疑惑待解答

Topic source

    l=[1]

    tl=[1]

    k=1

    while True:

        yield tl

        l=tl

        tl.append(1)

        while k<len(tl)-1:

            tl[k]=l[k-1]+l[k]

            k=k+1

        k=1

为什么上面这串代码运行后只重复输出第九行的值,但是把tl.append(1)改成tl=tl+[1]就能正确输出了呢,请问有谁能解答一下吗?

昨天我也遇到了同样的问题,而且我还用了pop,今天终于搞明白了。因为外面的results的内容其实是指向了triangles函数里面的tl上次调用所指向的list,如果在后面的调用中直接append或者pop tl里面的内容,就相当于修改了results里面的内容,所以结果会错误。但是改成tl=tl+[1]后,tl+[1]运算会生成一个新的list,相当于后面调用中的tl指向了一个新的list,和results里指向的list不再是同一个list了,这样就不会互相干扰了。不知道我这样说明白了没有,反正我是明白了。其实,老师在前面的内容里也强调了,python里面的变量其实是指向了一个目标,变量赋值其实是变量指向的调整,我觉得相当于C语言里面的指针操作,或者可以理解成这python的变量是全指针操作的。

我好像明白了,谢谢解答!


  • 1

Reply