On Mon, 24 Mar 2008 09:52:21 +0000, Duncan Booth wrote: > The method usually recommended is: > > best = list(test) > > as it has no side effects
In general, you can't assume *anything* in Python has no side effects, unless you know what sort of object is being operated on. Here's an example that changes the value of test: >>> test = iter((1, 2, 3, 4, 5, 6)) >>> best = list(test) >>> best [1, 2, 3, 4, 5, 6] >>> another = list(test) >>> another [] And here's an example that has a rather obvious side-effect: >>> class Foo(object): ... def __getitem__(self, n): ... if n == 3: print "I'm in ur puter, deletin ur files" ... if 0 <= n < 6: return n+1 ... raise IndexError ... >>> test = Foo() >>> best = list(test) I'm in ur puter, deletin ur files >>> best [1, 2, 3, 4, 5, 6] -- Steven -- http://mail.python.org/mailman/listinfo/python-list