XOR replacement algorithm in python?

I tried to implement XOR swap in python.

x,y= 10,20

x,y,x = x^y,x^y,x^y

print('%s , %s'%(x,y))

CONCLUSION:

30 , 30

I am not new to python, but I cannot explain this conclusion. It should be 20,10.

What happens under the hood?

+3
source share
5 answers

First, a tuple consisting of x^y, x^yand is created x^y. Then the tuple is unpacked in x, yand x, forcing both to become attached to the result x^y.

Save yourself a headache and do it with Putin:

x, y = y, x
+14
source

, , , , x, y = y, x, , x-oring... , !

>>> x = 1234
>>> y = 3421
>>> x ^= y
>>> y ^= x
>>> x ^= y
>>> print x
3421
>>> print y
1234

xor-swap xors, .. - ^= . , , , , , Python, ; -).

+9

"" .

>>> x, y = 10, 20
>>> x = x ^ y; print x, y
30 20
>>> y = x ^ y; print x, y
30 10
>>> x = x ^ y; print x, y
20 10
>>>

, , ( , ).

+3

XOR , . a b - ints.

EDIT ( ):

Python . , "" , XOR, ( , , ). (, C), . , XOR C99 ( " , " ) Python. , XOR " a b ".

:

>>> x = 3
>>> y = 5
>>> print "x: ", x, ", id(x): ", id(x), "y: ", y, ", id(y): ", id(y)
x:  3 , id(x):  137452872 y:  5 , id(y):  137452848
>>> x ^= y
>>> print "x: ", x, ", id(x): ", id(x), "y: ", y, ", id(y): ", id(y)
x:  6 , id(x):  137452836 y:  5 , id(y):  137452848
>>> y ^= x
>>> print "x: ", x, ", id(x): ", id(x), "y: ", y, ", id(y): ", id(y)
x:  6 , id(x):  137452836 y:  3 , id(y):  137452872
>>> x ^= y
>>> print "x: ", x, ", id(x): ", id(x), "y: ", y, ", id(y): ", id(y)
x:  5 , id(x):  137452848 y:  3 , id(y):  137452872

, (2.6.4) , x y . , (137452836), x y .

C:

int x = 3;
int y = 5;
printf("x: %d, &x: %p, y: %d, &y: %p\n", x, &x, y, &y);
x ^= y;
printf("x: %d, &x: %p, y: %d, &y: %p\n", x, &x, y, &y);
y ^= x;
printf("x: %d, &x: %p, y: %d, &y: %p\n", x, &x, y, &y);
x ^= y;
printf("x: %d, &x: %p, y: %d, &y: %p\n", x, &x, y, &y);

:

x: 3, &x: 0xbfd433ec, y: 5, &y: 0xbfd433e8
x: 6, &x: 0xbfd433ec, y: 5, &y: 0xbfd433e8
x: 6, &x: 0xbfd433ec, y: 3, &y: 0xbfd433e8
x: 5, &x: 0xbfd433ec, y: 3, &y: 0xbfd433e8

XOR, x y , .

+2

, :

x, y = 10, 20
x, y = y, x
print((x,y))

, , , , RHS , LHS , x^y .

+1

Source: https://habr.com/ru/post/1737091/


All Articles