我要解决的问题是有关leetcode的问题(链接: https://leetcode.com/problems/rotting-oranges/) 当我尝试更改可变网格时,它会更改副本p。
我在堆栈溢出时查看了类似的问题,并尝试了所有无效的解决方案。我还尝试自己使用打印来解决问题。
import copy
class Solution:
def orangesRotting(self, grid: List[List[int]]) -> int:
if grid == []:
return 0
s = []
t = 0
while True:
p = copy.copy(list(grid.copy()[:]))
print(p, grid)
for r, l in enumerate(grid):
for c, v in enumerate(l):
if v == 2:
if c-1>=0 and grid[r][c-1] == 1:
s.append([r, c-1])
if c+1<len(l) and grid[r][c+1] == 1:
s.append([r, c+1])
if r-1>=0 and grid[r-1][c] == 1:
s.append([r-1, c])
if r+1<len(grid) and grid[r+1][c] == 1:
s.append([r+1, c])
print(p, s)
for i in s:
grid[i[0]][i[1]] = 2
print(p, i)
print(p, grid)
if p == grid:
for i in grid:
for j in i:
if j == 1:
return -1
return t
print(t)
t+=1
s= []
在代码底部附近,当我更改变量网格时,变量p也被更改
答案 0 :(得分:1)
如所记载,copy.copy()
仅进行浅表复制-列表本身是不同的对象,但它们(至少最初)仍指向相同的对象。因此,如果这些对象是可变的,则通过两个列表确实可以看到对一个对象进行变异的结果。
这里想要的是copy.deepcopy()
,它将递归地创建(深层)列表中所有对象的副本。