1 | initial version |

The reason why your program doesn't work is due to the line

```
Q = A
```

in `rakovetkezo`

. When you do `Q = A`

, you make `Q`

point to the same object that `A`

is pointing to. Then, when you change `Q`

, you also change `A`

. See the following:

```
sage: A = [1,2,3]
sage: Q = A
sage: id(Q)
88220880
sage: id(A)
88220880
sage: Q[0] = 100
sage: A
[100, 2, 3]
```

In order to make a copy of A, you can do something like

```
Q = A[:]
```

or

```
Q = list(A)
```

or

```
from copy import copy
Q = copy(A)
```

Then your program will work just fine.

Sage also has a builtin class for working with with combinations which is a bit more fully-featured than `itertools.combinations`

. Here are some examples of this.

```
sage: S = Combinations(range(5), 3); S
Combinations of [0, 1, 2, 3, 4] of length 3
sage: S.cardinality()
10
sage: S.random_element()
[0, 3, 4]
sage: S.list()
[[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
sage: [x for x in S]
[[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
```

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.