易错点---列表的复制和赋值

今天为了写俄罗斯方块的代码,想要将原方块用地图色掩盖,然后产生新的更改后的方块

本来想用一个函数同时产生两个新旧列表的,但花了几小时,依旧没办法,通过求助问答和ChatGTP,终于搞明白:

如果要用一个函数取修改一个列表,要求产生两个新旧不同的列表,用简单的赋值是不能产生新列表的,需要用[:]或者copy()或者deepcopy(),

[:]和copy都能对单层列表进行复制,并产生新列表,新列表修改后,新旧列表不同

deepcopy能对多层列表进行复制,并产生新列表,新列表修改后,新旧列表不同

一:赋值

无法产生新旧列表:

#无法产生新旧列表的写法:
def change1(aa):
    bb = aa
    bb[0] = 99
    print(f"原列表{aa}新列表{bb}")
    print("--------------")


kk = [11, 22]
change1(kk)

结果:失败

二:【:】

对列表顶层复制

def change2(aa):
    bb = aa[:]
    aa[0] = 99
    print(f"原列表{bb}新列表{aa}")
    print("--------------")


kk = [11, 22]
mm = [[33, 22], 44]
change2(kk)
change2(mm)

 结果:成功

------------------------------------------------

【:】复制后对列表底层修改


def change2(aa):
    bb = aa[:]
    aa[0][0] = 99
    print(f"原列表{bb}新列表{aa}")
    print("--------------")


mm = [[33, 22], 44]
change2(mm)

结果:失败

 ----------------------------------------------------------------------------------------------------------

 三:copy()

如果COPY对顶层列表修改,可以成功

def change3(aa):
    bb = copy.copy(aa)
    bb[0] = 99
    print(f"原列表{aa}新列表{bb}")
    print("--------------")

mm = [[33, 22], 44]
change3(mm)

结果:成功

 ----------------------------------------------------------------------

如果COPY对底层列表修改

def change3(aa):
    bb = copy.copy(aa)
    bb[0][0] = 99
    print(f"原列表{aa}新列表{bb}")
    print("--------------")



mm = [[33, 22], 44]
change3(mm)

结果:失败

--------------------------------------------------------------------------

四 deepcopy():

 

def change4(aa):
    bb = copy.deepcopy(aa)
    bb[0][0] = 99
    print(f"原列表{aa}新列表{bb}")
    print("--------------")


mm = [[33, 22], 44]
change4(mm)

 结果:成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值