On Wed, 04 Jan 2006 22:38:06 -0500, "Stuart D. Gathman" <[EMAIL PROTECTED]> wrote:
> On Wed, 04 Jan 2006 10:54:17 -0800, KraftDiner wrote: >> I was under the assumption that everything in python was a refrence... >> >> so if I code this: >> lst = [1,2,3] >> for i in lst: >> if i==2: >> i = 4 >> print lst >> >> I though the contents of lst would be modified.. (After reading that >> 'everything' is a refrence.) >> ... >> Have I misunderstood something? > It might help to do a translation to equivalent C: > int _i1 = 1; > int _i2 = 2; > int _i3 = 3; > int _i4 = 4; > int* lst[NLST] = { &_i1,&_i2,&_i3 }; Okay so far. > int _idx; /* internal iterator */ > for (_idx = 0; _idx < NLST; ++_idx) { > int *i = lst[_idx]; [snip] That's the C idiom for i in range(len(lst)) we all complain about here. How about (untested): /* iterate over the list, binding i to each item in succession; _idx is internal to the interpreter; separate the definition of i from the assignment of i for clarity */ int **_idx; for( _idx = lst; _idx < lst + NLST; ++_idx ) { int *i; i = *_idx; /* compare "the item to which i is bound" to "a constant" */ if( *i == *(&_i2) ) /* rebind i to _i4 */ i = &_i4; } > for (_idx = 0; _idx < NLST; ++_idx) > printf("%d\n",*lst[_idx]); for( _idx = lst; _idx < lst + NLST; ++_idx ) { int *i = *_idx; printf( "%d\n", *i ); } Regards, Dan -- Dan Sommers <http://www.tombstonezero.net/dan/> -- http://mail.python.org/mailman/listinfo/python-list