Причина, по которой это происходит, заключается в том, что вы изменяете свой основной список, а не значение для этого конкретного ключа, вы можете создать несколько списков для их назначения или создать несколько копий списка при назначении их в словарь. Вы можете сделать это следующим способом:
my_dict = {"A_key":my_list[:] ,"B_key":my_list[:],"C_key":my_list[:]}
my_dict["A_key"][4] = "Changed_Data"
. Здесь происходит то, что вы копируете список с начала до конца списка. Это называется разрезанием списка, когда вы «разрезаете» список от одного конца к другому. Когда вы разрезаете список, он возвращает обратно новый список от начального индекса до конечного индекса.
Вы предоставляете начальный индекс, используя [0:10]
, где 0 - начало, а 10 - конец. Если вы не указали начало и конец, возвращается весь список. Это может быть использовано для копирования списка.
Но это все еще то, что называется «мелкой копией», где, если у вас есть список внутри этого списка, тогда вложенный список все равно будет подвержен изменениям в основном списке. Это все еще может быть решено с помощью того, что называется глубокой копией,
from copy import deepcopy
old_list = [1, 2, 3, [4]]
new_list = deepcopy(old_list)
Когда Вы создаете объект Конфигурации и загружаете XML и в конечном счете создаете SessionFactory, держитесь за ссылку на объект Конфигурации, Вы имеете.
Можно использовать объект Свойств ссылки Конфигурации, которую Вы имеете, или можно сделать что-то как Диалект. GetDialect (_configuration. Свойства).
спасибо за Ваш ответ. Одна вещь, которую я не люблю в том решении, состоит в том, что я должен сохранить конфигурацию и раздать ее в методах, для которых нужно знание диалекта.
Я нашел несколько других путей, которым нужна только ссылка на ISession ISessionFactory.
От ISession:
public static Dialect GetDialect(ISession session)
{
Dialect dialect = session.GetSessionImplementation().Factory.Dialect;
return dialect;
}
От ISessionFactory:
public static Dialect GetDialect(ISessionFactory sessionFactory)
{
var implementor = sessionFactory as ISessionFactoryImplementor;
Dialect dialect = implementor.Dialect;
return dialect;
}