为什么我的字节数组没有不同,即使 print() 说它们不同?

Why are my byte arrays not different even though print() says they are?

我是 python 的新手,所以如果我问了一个愚蠢的问题,请原谅我。在我的函数中,我为给定的字节数生成一个随机字节数组,称为 "input_data",然后按字节添加一些位错误,并将结果存储在另一个称为 "output_data" 的字节数组中。打印功能显示它完全按预期工作,有不同的字节。但是如果我之后比较字节数组,它们似乎是相同的!

def simulate_ber(packet_length, ber, verbose=False):
    # generate input data
    input_data = bytearray(random.getrandbits(8) for _ in xrange(packet_length))
    if(verbose):
        print(binascii.hexlify(input_data)+" <-- simulated input vector")

    output_data = input_data

    #add bit errors
    num_errors = 0
    for byte in range(len(input_data)):
        error_mask = 0
        for bit in range(0,7,1):
            if(random.uniform(0, 1)*100 < ber):
                error_mask |= 1 << bit
                num_errors += 1
        output_data[byte] = input_data[byte] ^ error_mask

    if(verbose):
        print(binascii.hexlify(output_data)+" <-- output vector")
        print("number of simulated bit errors: " + str(num_errors))

    if(input_data == output_data):
        print ("data identical")


number of packets: 1
bytes per packet: 16
simulated bit error rate: 5
start simulation...
0d3e896d61d50645e4e3fa648346091a <-- simulated input vector
0d3e896f61d51647e4e3fe648346001a <-- output vector
number of simulated bit errors: 6
data identical

错误在哪里?我确定问题出在我的耳朵之间...

提前感谢您的帮助!

output_data = input_data

Python 是一种参考语言。当您执行上述操作时,两个变量现在都引用内存中的同一个对象。例如:

>>> y=['Hello']
>>> x=y
>>> x.append('World!')
>>> x
['Hello', 'World!']
>>> y
['Hello', 'World!']

output_data 作为一个新的 bytearray 投射,你应该很好:

output_data = bytearray(input_data)