Discuss / Python / 我输出了错误信息,终于知道为什么要切片了

我输出了错误信息,终于知道为什么要切片了

Topic source

def triangles(): N = [1] while True: yield N S = N.copy() S.append(0) N = [S[i - 1] + S[i] for i in range(len(S))] 这里我没有用到切片,我无意中看到了一个copy(),然后我尝试了下,真的成功了,一开始无法理解评论里的切片的作用,我试着输出了下错误信息: if results == 此处省略 print('测试通过!') else: print('测试失败!') print(results) #我加了这一句 然后我发现如果不切片不用copy输出的结果是: [[1, 0], [1, 1, 0], [1, 2, 1, 0], [1, 3, 3, 1, 0], [1, 4, 6, 4, 1, 0], [1, 5, 10, 10, 5, 1, 0], [1, 6, 15, 20, 15, 6, 1, 0], [1, 7, 21, 35, 35, 21, 7, 1, 0], [1, 8, 28, 56, 70, 56, 28, 8, 1, 0], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]] 也就是每一个都有0在后面,然后我突然意识到,S改变N也会随之改变,恐怕S是复制了N的地址而已,切片的目的可能也是在于为了让S真正复制N,所以我尝试用copy,结果成功了,作为一个萌新,我终于弄懂了这一点还是有点开心的(可能会理解上有些错误,请大佬们见谅)


  • 1

Reply