为什么我的字节数组没有什么不同,即使print()表示它们也是如此?

时间:2019-07-13 12:56:12

标签: python-2.x

我是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

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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)