В Python, когда bytearray передается функции, он передается по ссылке или по значению?
В Python 3.7 я пытаюсь смоделировать объект HTTPResponse для тестирования. Когда я копирую код из объекта http.client.HTTPResponse, я получаю результат, отличный от того, который получает стандартная библиотека.
Мой код:
#I call the mock buffer like this
intBytesBuffered = self.HTTPResponseMock.readinto(tempBuffer)
HTTPResponseMock
def read(self, amt = None):
if amt is not None:
# Amount is given, implement using readinto
b = bytearray(amt)
else:
b = bytearray(len(self.MockedContentBuffer))
n = self.readinto(b)
return memoryview(b)[:n].tobytes()
def readinto(self, b):
"""docstring"""
#mvb = memoryview(b)
bufferSize = len(b)
contentSize = len(self.MockedContentBuffer)
b.clear()
if bufferSize >= contentSize:
b = self.MockedContentBuffer
else:
b = self.MockedContentBuffer[0:bufferSize]
del self.MockedContentBuffer[0:bufferSize]
return len(b)
Найдены нужные функции из http.client.HTTPResponse здесь строки 436-500
Самый важный отрывок из стандартной библиотеки - здесь, где read readto вызывает:
b = bytearray(amt)
n = self.readinto(b)
return memoryview(b)[:n].tobytes()
Стандартная библиотека делает почти то же самое при вызове буфера, как и я, но когда она запускается, байтовая библиотека b
в отрывке возвращает данные внутри нее. Когда я вызываю read, tempBuffer
возвращается пустым?