Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 bytearray.reverse()不在类中工作,在对象上调用时工作_Python_Python 3.x_Class_Python Bytearray - Fatal编程技术网

Python bytearray.reverse()不在类中工作,在对象上调用时工作

Python bytearray.reverse()不在类中工作,在对象上调用时工作,python,python-3.x,class,python-bytearray,Python,Python 3.x,Class,Python Bytearray,我有一个类,在初始化过程中,我使用bytearray.reverse()函数将一个成员设置为bytearray,然后将另一个成员设置为其反向 当我实例化该类时,“反转”数组不会反转。如果我在实例化后调用成员reverse,它会很好地反转。发生了什么事?类和ipython输出如下 class Cipher(): def __init__(self, key=bytearray(b'abc123y;')): self.setKeys(key) def setKeys(self, k

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

当我实例化该类时,“反转”数组不会反转。如果我在实例化后调用成员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;')

在调用
self.decrKey
上的
.reverse
时,您是在同一个引用上操作的,因为您以前进行了分配:

self.decrKey = self.encrKey
因此,您同时反转了
encrKey
decrKey
。相反,请用
[:]
复制
decrKey
,然后调用
.reverse

self.encrKey = key[:8]
self.decrKey = self.encrKey[:]
self.decrKey.reverse()

在调用
self.decrKey
上的
.reverse
时,您是在同一个引用上操作的,因为您以前进行了分配:

self.decrKey = self.encrKey
因此,您同时反转了
encrKey
decrKey
。相反,请用
[:]
复制
decrKey
,然后调用
.reverse

self.encrKey = key[:8]
self.decrKey = self.encrKey[:]
self.decrKey.reverse()

我想可能是那样的,但是。。。为什么在对象实例化后它还能工作?@DanielB。通过反转两个属性,它在两种情况下都起作用。调用
cipher.decrKey.reverse()
后,查看
cipher.encrKey
的输出;它也变了。好。我觉得自己很笨。我想我需要研究python何时使用引用而不是副本。我想可能是这样的,但是。。。为什么在对象实例化后它还能工作?@DanielB。通过反转两个属性,它在两种情况下都起作用。调用
cipher.decrKey.reverse()
后,查看
cipher.encrKey
的输出;它也变了。好。我觉得自己很笨。我想我需要研究python何时使用引用而不是副本。