Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这两张照片的结果完全不同_Python - Fatal编程技术网

Python 这两张照片的结果完全不同

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):

为什么第一次打印有多种不同的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):
        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]]