Python, эквивалентный C++ std::vector [дубликат]Python

Программы на Python
Ответить
Anonymous
 Python, эквивалентный C++ std::vector [дубликат]

Сообщение Anonymous »

Этот вопрос был ошибочно закрыт со ссылкой на этот вопрос [https://stackoverflow.com/questions/845 ... -in-python], который касается не перегрузки операторов, а сигнатуры функций; две разные вещи. Кроме того, у их вопроса есть решение, а у моего пока нет. Решение в нем не связано с вопросом/задачей, представленным здесь:
Оно имеет отношение к вопросу, но постоянно меняется этим другим человеком, поскольку этот вопрос задан с точки зрения пользователя 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)).).
  • Выдает ошибку и не может быть выполнен.
Потребители и я случайно будем регулярно использовать эту линию. Следовательно, для продуктивности критически важно, чтобы проявилось поведение 1 или 2. Было бы вредно, если бы y молчаливо ссылался на x (как в случае со списком, я, конечно, знаю об этом факте) и тем самым вызывал неожиданное поведение где-то еще.На пути к решению
Я уверен, что это возможно. Например, можно для каждого создания объекта Vector создать глобальную переменную в каком-то списке или что-то еще, что будет хранить жесткую память указанного объекта, например. хеш-карту, идентифицировать созданные объекты и создавать для них копии. Один из способов сделать это — использовать тип класса типа данных в Python, например кортеж, который по умолчанию создает твердые копии, чтобы вызвать вызов конструктора, который заставит диспетчер глобальной памяти создать твердую копию для следующего экземпляра. Но я уверен, что есть многие, кто предпочитает концепцию присваивания C++ и имеет что-то удобное, реализованное на Python. Вот почему вопрос задан здесь.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -stdvector
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»