Предыдущие значения словаря в списке Python изменяются при добавлении нового элемента в список
Я пытаюсь добавить новые словари в список, чтобы он работал как файл журнала для камеры, сохраняя значения широты и долготы фотографии.
Для этого я подписываюсь на тему ROS, которая дает мне данные и хранит их в закрытой переменной self._globalLatLong = [0,0]
,
def locationCallback(self,msg):
self._globalLatLong[0] = msg.latitude
self._globalLatLong[1] = msg.longitude
def main():
rospy.Subscriber("/mavros/global_position/global",NavSatFix ,cameraManagerInstance.locationCallback)
Когда камера запускается, запускается следующее и добавляет значение _globalLatLong
в список.
def cameraTriggerCallback(self,msg):
logInstance = {'latlong':self._globalLatLong}
self._log.append(logInstance) #add all to log
Я ожидал бы, что каждый словарь в списке будет содержать широту и долготу, определенные для того, когда камера была запущена, то есть различные значения для каждой записи (что-то похожее):
[{'latlong': [47.3976091, 8.5455942]}, {'latlong': [47.3976092, 8.5455943]}, {'latlong': [47.3976091, 8.5455944]}]
Но вместо этого я получаю список, в котором каждый словарь совпадает с последним добавленным словарем (то есть каждый элемент в списке одинаков):
#Camera trigger 1:
[{'latlong': [47.3976084, 8.5455941]}]
#Camera trigger 2:
[{'latlong': [47.3976088, 8.5455941]}, {'latlong': [47.3976088, 8.5455941]}]
#Camera trigger 3:
[{'latlong': [47.3976091, 8.5455942]}, {'latlong': [47.3976092, 8.5455943]}, {'latlong': [47.3976091, 8.5455944]}]
Более того, мне удалось исправить мою проблему, используя немного другой синтаксис:
logInstance = {'latlong':[self._globalLatLong[0],self._globalLatLong[1]]}
Есть идеи, что может быть причиной этого? Я попробовал то же самое со значениями высоты и времени, и у меня не было проблем. Большое спасибо.
Изменить: решено, была проблема с изменением значений в _globalLatLong
вместо того, чтобы создавать новый список, смотрите: Python: почему мой список меняется, когда я на самом деле не изменяю его?