Оно имеет отношение к вопросу, но постоянно меняется этим другим человеком, поскольку этот вопрос задан с точки зрения пользователя C++. . Это актуально, что также подтверждается комментарием Вольстада, поскольку поведение присваивания является свойством класса в C++. Например, запись A a2=a1; в C++ может делать что угодно из ничего, присваивать значения и ссылаться на них.
Я ищу Python, эквивалентный контейнеру C++ std::vector . Я читал, что список Python является предполагаемым эквивалентом, но это явно неправда.
Чтобы быть конкретным, я ищу стандартный контейнер в Python, поведение которого напоминает следующее. Мне нужно именно это (никакие смысловые изменения или дополнения недопустимы, так как они наверняка забудутся при обычном использовании):
Код: Выделить всё
x = Vector()
y = Vector()
x.append(4)
x.append(5)
x.append(6)
y = x # critical line
y[1] = 123456;
x[2] = 234567;
x.append(7)
print( len(x) ) # prints 4
print( len(y) ) # prints 3
print( y[2] ) # prints 6
print( x[1] ) # prints 5
Существует два варианта критической линии.
- Он не выдает ошибок при выполнении и работает точно так, как указано, т. е. без изменений, дополнений или чего-либо еще (т. е. no y = copy.deepcopy(x)).).
- Выдает ошибку и не может быть выполнен.
Я уверен, что это возможно. Например, можно для каждого создания объекта Vector создать глобальную переменную в каком-то списке или что-то еще, что будет хранить жесткую память указанного объекта, например. хеш-карту, идентифицировать созданные объекты и создавать для них копии. Один из способов сделать это — использовать тип класса типа данных в Python, например кортеж, который по умолчанию создает твердые копии, чтобы вызвать вызов конструктора, который заставит диспетчер глобальной памяти создать твердую копию для следующего экземпляра. Но я уверен, что есть многие, кто предпочитает концепцию присваивания C++ и имеет что-то удобное, реализованное на Python. Вот почему вопрос задан здесь.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -stdvector
Мобильная версия