myList = [[1]*4] * 3
создает один объект списка [1,1,1,1]
в памяти и копирует его ссылку 3 раза. Это эквивалентно obj = [1,1,1,1]; myList = [obj]*3
. Любая модификация obj
будет отражена в трех местах, где obj
упоминается в списке. Правильным утверждением будет:
myList = [[1]*4 for _ in range(3)]
или
myList = [[1 for __ in range(4)] for _ in range(3)]
. Важно отметить, что *
оператор в основном используется для создания список литералов. Поскольку 1
является литералом, значит, obj =[1]*4
создаст [1,1,1,1]
, где каждый 1
будет атомарным, а не ссылкой 1
, повторяемым 4 раза. Это означает, что если мы obj[2]=42
, то obj
станет [1,1,42,1]
не [42,42,42,42]
, как могут предположить некоторые.
Если вы используете OpenCensus, вы можете использовать аннотации для передачи метаданных в бэкэнд Trace: https://cloud.google.com/trace/docs/setup/java#custom_spans .
Я не вижу ничего в документации spring-cloud-gcp-starter-trace (что мало что смог найти) относительно аннотаций.
Вы можете добавить пользовательские теги, используя brave.SpanCustomizer
. Просто подключите его автоматически, так как компонент уже существует в контексте приложения. Затем вы можете добавить теги следующим образом:
@Autowired
SpanCustomizer spanCustomizer;
...
spanCustomizer.tag("my-tag", "my tag value");
Они превратятся в метки на ваших следах в Stackdriver Trace, по которым вы можете искать .