栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python中使用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])
    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]]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/741162.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号