Python 这两张照片的结果完全不同
为什么第一次打印有多种不同的s,而第二次打印只有首字母s。我不明白,我怎么能避免呢Python 这两张照片的结果完全不同,python,Python,为什么第一次打印有多种不同的s,而第二次打印只有首字母s。我不明白,我怎么能避免呢 当我使用python时使用递归时出现问题当s第一次被附加到a时,m等于零,它没有将列表s的副本附加到a。它将引用附加到s,因此每次s更改时,更改的内容都会随之更改。您的打印#2只执行过一次,if not s in a仅在第一次执行时有效 在Python控制台中尝试此操作,以查看更简单的示例: n = 10 s = [True] * (n) a = [] def dfs(m):
当我使用python时使用递归时出现问题当s第一次被附加到a时,m等于零,它没有将列表s的副本附加到a。它将引用附加到s,因此每次s更改时,更改的内容都会随之更改。您的打印#2只执行过一次,
if not s in a
仅在第一次执行时有效
在Python控制台中尝试此操作,以查看更简单的示例:
n = 10
s = [True] * (n)
a = []
def dfs(m):
if m == 0:
print(s) #(1)
if s not in a:
print(s) #(2)
a.append(s)
return
for x in range(0, n, 2):
s[x] = not s[x]
dfs(m - 1)
for x in range(0, n, 2):
s[x] = not s[x]
for x in range(1, n, 2):
s[x] = not s[x]
dfs(m - 1)
for x in range(1, n, 2):
s[x] = not s[x]
for x in range(0, n, 3):
s[x] = not s[x]
dfs(m - 1)
for x in range(0, n, 3):
s[x] = not s[x]
dfs(10)
你能澄清你所说的“为什么第一次打印有多种不同的s,而第二次打印只有首字母s”是什么意思吗?请解释你期望的代码片段应该如何运行。为什么列表a在函数后只有一个元素?你调试代码了吗?len(a)只有一个元素,函数“dfs”是在对这三个操作执行m次操作后,查找列表“s”的状态
>>> a = [1,2,3,4]
>>> b = []
>>> b.append(a)
>>> a[2] = 7
>>> b
[[1, 2, 7, 4]]