欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Python中使用append函数时,其实是一种指针的操作,对被操作数据的修改会导致使用该函数的数组的修改

时间:2023-05-17

如下面的一段代码所示:

a=[1,2,3]b=[-6,0,6]c=[]d=[]for i in range(len(a)): for j in range(len(b)): d.append(a[i]*b[j]) c.append(d) d.clear()print('c={}'.format(c))

本意是想得到一个3*3的一个数组,但在循环的最后使用了d.clear()之后,c中数据被清空

c=[[], [], []]

关键出在append函数上,我将代码稍作修改,进行如下测试:

a=[1,2,3]b=[-6,0,6]c=[]d=[]for i in range(len(a)): for j in range(len(b)): d.append(a[i]*b[j]) print('d={}'.format(d)) c.append(d) print('c={}'.format(c)) d.clear()print('c={}'.format(c))

得到的结果如下:

d=[-6]d=[-6, 0]d=[-6, 0, 6]c=[[-6, 0, 6]]d=[-12]d=[-12, 0]d=[-12, 0, 12]c=[[-12, 0, 12], [-12, 0, 12]]d=[-18]d=[-18, 0]d=[-18, 0, 18]c=[[-18, 0, 18], [-18, 0, 18], [-18, 0, 18]]c=[[], [], []]

在第一次,第二次循环中d.clear()并没有清空c中的元素,只有第三次循环后,c中的元素遭到清空,故在此处加一个判断语句

a=[1,2,3]b=[-6,0,6]c=[]d=[]for i in range(len(a)): for j in range(len(b)): d.append(a[i]*b[j]) c.append(d[:])print('c={}'.format(c))

得到了正确的结果:

c=[[-6, 0, 6], [-12, 0, 12], [-18, 0, 18]]

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。