今天为了写俄罗斯方块的代码,想要将原方块用地图色掩盖,然后产生新的更改后的方块
本来想用一个函数同时产生两个新旧列表的,但花了几小时,依旧没办法,通过求助问答和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)