Thanks for a more detailed explanation. I've though about it a bit more and here are come additional comments:

1. If you do something like `lolo.labels[:] = 0`, this is completely your fault since you consciously changed `lolo`'s attribute.

2. However, it may happen that you did something like in the example below:
```python
import numpy as np
from sklearn.cross_validation import LeaveOneLabelOut

labels = np.array([0, 1, 2, 1, 1, 2, 0, 0])
lolo = LeaveOneLabelOut(labels)

# ... other code ...

labels[:] = 0

# ... other code ...

for train, test in lolo:
    print train, test
```

In this case, the for loop iterating through `lolo` will produce unwanted results. Also, `lolo`'s `n_unique_labels` attribute will have a wrong value.

Wouldn't it be better if the copying of labels would done in `__init__`? This way we could remove the redundant calls to the `unique` method and all other attributes computed in `__init__` (e.g. `n_unique_labels`) would also have the correct value?