y1qcy 发表于 2020-5-21 14:23:53

不想被改的东西被改了

def fill(a,b):
            board = a.copy()
            blank = b.copy()
            temp = ''
            for each in blank:
                blank.clear()
                for i in range(1,10):
                  if is_valid(each,each,i):
                        blank.append(str(i))
                if len(blank) == 1:
                  board]] = blank
                  temp = each
                  break
            if temp:
                blank.pop(temp)
                board,blank= fill(board,blank)
            return board,blank

比如这个代码 我调用的时候用 fill(board,blank)
为什么原始的board和blank也被修改了啊 在函数里明明用了copy()

heidern0612 发表于 2020-5-21 14:28:36

board]] 看这句就知道是个二级嵌套列表,

二级嵌套列表拷贝要用深拷贝,不要用浅拷贝。

因为列表是个可变类型,浅拷贝会导致没法复制更深一层。

永恒的蓝色梦想 发表于 2020-5-21 14:28:43

因为你用的浅拷贝。

qiuyouzhi 发表于 2020-5-21 14:30:08

用copy模块的deepcopy

Twilight6 发表于 2020-5-21 14:31:20

可以用copy模块的deepcopy
import copy

copy.deepcopy()
页: [1]
查看完整版本: 不想被改的东西被改了