@mkone112
Начинающий питонист.

Как воспользоваться указателями в python?

Как в python реализовать подобное поведение?
#include <iostream>

using namespace std;

void change(char* a, char* b)
{
    char temp = *a;
    *a = *b;
    *b = temp;
}

int main(void)
{
    char a = 'x';
    char b = 'y';
    printf("a=%c, b=%c\n", a, b);
    change(&a, &b);

    printf("a=%c, b=%c\n", a, b); 
}

Меня интересует не что-то банальное, вроде увеличения int на единицу, а скажем полная подмена одного экземпляра объекта другим. Подойдут любые способы, может это можно реализовать подменив кусок кода в cpython? Или это можно сделать с помощью cython? Может это умеют какие-нибудь реализации python вроде pypy?
  • Вопрос задан
  • 312 просмотров
Решения вопроса 1
@mkone112 Автор вопроса
Начинающий питонист.
Черт возьми да! Это возможно. Конечно на данный момент вариант с кучей костылей, но их можно сильно поправить.
>> s = 'string'
>> w = Proxy(s)
>> isinstance(w, str), id(w)
True, 1680141601288
>> print(w)
string
>> w.__wrapped__ = [1, 2, 3]
>> isinstance(w, list), id(w)
True, 1680141601288
>> print(w)
[1, 2, 3]

P.S. отталкивался от https://wrapt.readthedocs.io/en/latest/wrappers.html
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Тут, похоже, имеется непонимание, как в питоне устроены переменные и чем они отличаются от переменных (и отчасти указателей) в Си.
В Си (и не только, в паскале, например, тоже) переменная - это коробочка, которая уже есть и в неё можно что-то положить подменив какой-то мусор, который там был раньше, потом её содержимое можно заменить.
В Питоне переменноая похожа на ярлычок. Ярлычок - это имя, а всё вокруг - это объекты. На один объект можно повесить много ярлычков (представьте себе ярлычок от чайного пакетика). Каждый ярлычок - это отдельное имя или позиция в списке, кортеже, словаре...) Обхект один, а ссылок на него может быть много. Ярлычок можно уничтожить или перевесить на другой объект. Когда не остаётся ни одного ярлычка, привязанного к объекту, он становится кондидатом на удаление и освобждение памяти.
Вам в соседнем ответе показали как можно элегантно обменять именами два объекта в питоне. Да, именно, поменяются местами имена, но объекты как были так и останутся. Это как поменять таблички на кабинетах директора и главбуха.
Так что отчасти все переменные в питоне - это умные слабые ссылки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы