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]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值