Я не верю, что можно просто реализовать эквивалент обмена C ++ в Python.
Это связано с фундаментальными различиями между объектной моделью C ++ и объектной моделью Python. В python все переменные ссылаются на объекты. С реализованным свопом все, что происходит, - это объекты, на которые ссылаются две переменные. Сами объекты не тронуты, поэтому ничто, ссылающееся на существующие объекты, не увидит каких-либо изменений.
В C ++ std::swap
значения двух объектов обмениваются, поэтому любое выражение, обозначающее какой-либо из обменяемых объектов, увидит изменения.
>>> c = [ "hello", "world" ]
>>> d = []
>>> a = c
>>> b = d
>>> a, b = swap_in_python(a, b)
>>> c
['hello', 'world']
>>> d
[]
>>>
против
std::list<std::string> c, d;
c.push_back("hello");
c.push_back("world");
std::list<std::string> &a = c, &b = d;
std::swap( a, b ); // c is empty, d is "hello", "world"