Function 如何正确定义变量?

Function 如何正确定义变量?,function,python-3.x,variables,Function,Python 3.x,Variables,因此,我定义了一个函数,它生成一个由二进制整数组成的随机nxm矩阵,称为随机_矩阵。为此,我只对生成二元向量感兴趣,即维数为nx1的矩阵。这些由列表表示。我还定义了一个函数,该函数接受二进制整数的输入向量,并输出具有给定出现百分比的位翻转向量,称为bf_2 现在我想让Alice生成一个随机输入向量,Bob得到一个相同的向量,Eve得到Alice向量的一个翻转版本。所以我使用了下面的代码: import functions_module as fm input_length = int(inpu

因此,我定义了一个函数,它生成一个由二进制整数组成的随机nxm矩阵,称为
随机_矩阵
。为此,我只对生成二元向量感兴趣,即维数为nx1的矩阵。这些由列表表示。我还定义了一个函数,该函数接受二进制整数的输入向量,并输出具有给定出现百分比的位翻转向量,称为
bf_2

现在我想让Alice生成一个随机输入向量,Bob得到一个相同的向量,Eve得到Alice向量的一个翻转版本。所以我使用了下面的代码:

import functions_module as fm

input_length = int(input('What is the length of the input string?'))
error = int(input('What is the percentage error in the string received by Eve?'))

Alice = fm.random_matrix(input_length,1)
Bob = Alice
Eve = fm.bf_2(Alice,error)

print(Alice)
print(Bob)
print(Eve)
然而,这为Alice、Bob和Eve提供了相同的输出,这不是我想要的。这与我定义变量Alice、Bob和Eve的方式有关。任何帮助都将不胜感激!我想要一些可以输出的东西

[0,0,0,0]
[0,0,0,0]
[0,0,1,0]
我在下面给出了我的位翻转代码

def bf_2(bit_string,percentage_error):

    """Bit flips the input string for a given percentage of occurence"""

    from random import randint

    bits = bit_string

    for i in range(0,len(bits)):
        r = randint(1,100)
        if r <= percentage_error:
            if bits[i] == 0:
                bits[i] = 1
            else:
                bits[i] = 0

    return bits
def bf_2(位字符串,百分比错误):
“”“位按给定的出现百分比翻转输入字符串”“”
从随机导入randint
位=位字符串
对于范围内的i(0,len(位)):
r=randint(1100)
如果r
这不符合你的预期。现在有两个名称引用同一个对象。使用任一变量进行的修改对两个变量都是可见的(因为它们是相同的)

您需要复制对象。使用通常是最安全的方法。它不仅复制给定对象,还复制它所引用的所有对象,确保最终不会在复制的顶级对象之间共享内部引用

import copy
Bob = copy.deepcopy(Alice)

Alice
Bob
是同一个列表。使用
Bob=Alice[:]
使
Bob
成为
Alice
的副本,而不是同一个对象。此外,
bf_2()
也没有做你认为的事情,原因类似-
bits
bit_字符串
,你在函数中对它进行了变异。更多信息,请参见Ned Batchelder。@Zero为什么要在注释中留下答案?“你有一个完全正确的答案,并有支持性的引用。@JonathonReinhart部分原因是在我正确查看
bf_2()
之前,我没有想到会比第一条评论(答案有点稀疏)更进一步,部分原因是它几乎肯定是重复的。”(如果没有你的答案,我会去找的)。
import copy
Bob = copy.deepcopy(Alice)