0

我有一个类,在初始化中我将一个成员设置为字节数组,然后使用 bytearray.reverse() 函数将另一个成员设置为反向。

当我实例化类时,“反转”数组没有反转。如果我在实例化后对成员调用 reverse ,它会很好地反转。怎么了?类和 ipython 输出如下

class Cipher():
  def __init__(self, key=bytearray(b'abc123y;')):
    self.setKeys(key)

  def setKeys(self, key):
    if isinstance(key, bytearray) and len(key) >= 8:
      self.encrKey = key[:8]
      self.decrKey = self.encrKey
      self.decrKey.reverse()
      print("Encrypt: ", self.encrKey)
      print("Decrypt: ", self.decrKey)
      return True
    else:
      return False

In [13]: cipher = Cipher()
Encrypt:  bytearray(b';y321cba')
Encrypt:  bytearray(b';y321cba')

In [14]: cipher.decrKey.reverse()

In [15]: cipher.decrKey
Out[15]: bytearray(b'abc123y;')
4

1 回答 1

2

当您调用时,您正在根据相同的参考执行.reverse操作,self.decrKey因为您之前进行了分配:

self.decrKey = self.encrKey

结果,您正在反转 。相反,使用复制然后调用:encrKeydecrKeydecrKey[:].reverse

self.encrKey = key[:8]
self.decrKey = self.encrKey[:]
self.decrKey.reverse()
于 2017-03-05T02:03:26.663 回答