Hello everyone, I've been working with ctypes recently, and I've come across what seems to be some slightly confusing behaviour, when comparing ctype's Structure against `bytes` and `bytearray` objects
import ctypes class Int(ctypes.Structure): _fields_ = [("first_16", ctypes.c_int8), ("second_16", ctypes.c_int8)] def serialise(self): return ctypes.string_at(ctypes.addressof(self), ctypes.sizeof(self)) i_obj= Int(first_16= 65, second_16=66) print(i_obj.first_16, i_obj.second_16) i_bytes = i_obj.serialise() print(list(i_bytes)) assert type(i_bytes) == bytes i_bytearray = bytearray(i_bytes) print("obj == bytes =>", i_obj==i_bytes) print("bytes == obj =>", i_bytes==i_obj) print("obj == bytearray =>", i_obj==i_bytearray) print("bytearray == obj =>", i_bytearray==i_obj) When I run this (Python 3.6, and Python2.7) , the final 4 print statements give the following: """ obj == bytes => False bytes == obj => False obj == bytearray => True bytearray == obj => True """ Is this a bit strange -- my understanding was that `bytes` and `bytearray` would normally be expected to work quite interchangeably with each other? It also means that: bytearray == obj => True bytes == bytearray => True bytes == obj => False If anyone has any experience in this area, and can let me know if I'm overlooking something silly, and guidance would be gratefully appreciated. Alternatively, I am happy to open up a bug-report if this looks like unexpected behaviour? Best wishes, Mike -- https://mail.python.org/mailman/listinfo/python-list