Python bytearray.reverse()不在类中工作,在对象上调用时工作
我有一个类,在初始化过程中,我使用bytearray.reverse()函数将一个成员设置为bytearray,然后将另一个成员设置为其反向 当我实例化该类时,“反转”数组不会反转。如果我在实例化后调用成员reverse,它会很好地反转。发生了什么事?类和ipython输出如下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
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何时使用引用而不是副本。