From: Roberto V. <rvi...@mk...> - 2007-04-06 10:42:47
|
All -- In jython, if 'list1' is a list, should 'list2 = list( list1 )' provide a shallow copy as it does in python? At least in 2.1, it seems to provide just an alias. Assuming this isn't a bug (typically they aren't), can someone explain the difference in behavior? I don't seem to recall reading anything about it... Below are the same code for both jython and python: Jython 2.1 on java1.5.0_09 (JIT: null) Type "copyright", "credits" or "license" for more information. >>> a = ['my', 'copy', 'test'] >>> a ['my', 'copy', 'test'] >>> b = list( a ) >>> b ['my', 'copy', 'test'] >>> a.reverse() >>> a ['test', 'copy', 'my'] >>> b ['test', 'copy', 'my'] >>> a is b 1 Python 2.4.4 (#2, Oct 20 2006, 00:23:25) [GCC 4.1.2 20061015 (prerelease) (Debian 4.1.1-16.1)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> a = ['my', 'copy', 'test'] >>> a ['my', 'copy', 'test'] >>> b = list( a ) >>> b ['my', 'copy', 'test'] >>> a.reverse() >>> a ['test', 'copy', 'my'] >>> b ['my', 'copy', 'test'] >>> a is b False Roberto |
From: Updike, C. <Cla...@jh...> - 2007-04-06 15:32:51
|
It appears to have changed from jython 2.1 to 2.2. However, you can do L2 =3D l1[:] to produce a shallow copy in 2.1: Jython 2.1 on java1.5.0_02 (JIT: null) Type "copyright", "credits" or "license" for more information. >>> l1 =3D [1,2,3] >>> l2 =3D list(l1) >>> l2 is l1 1 >>> l2 =3D l1[:] >>> l2 is l1 0 >>> l2 =3D=3D l1 1 >>> -Clark > Sent: Friday, April 06, 2007 6:40 AM > To: jyt...@li... > Subject: [Jython-users] list() behavior >=20 > All -- >=20 > In jython, if 'list1' is a list, should 'list2 =3D list( list1=20 > )' provide a shallow copy as it does in python? At least in=20 > 2.1, it seems to provide just an alias. Assuming this isn't=20 > a bug (typically they aren't), can someone explain the=20 > difference in behavior? I don't seem to recall reading=20 > anything about it... Below are the same code for both jython=20 > and python: >=20 > Jython 2.1 on java1.5.0_09 (JIT: null) > Type "copyright", "credits" or "license" for more information. > >>> a =3D ['my', 'copy', 'test'] > >>> a > ['my', 'copy', 'test'] > >>> b =3D list( a ) > >>> b > ['my', 'copy', 'test'] > >>> a.reverse() > >>> a > ['test', 'copy', 'my'] > >>> b > ['test', 'copy', 'my'] > >>> a is b > 1 >=20 >=20 > Python 2.4.4 (#2, Oct 20 2006, 00:23:25) [GCC 4.1.2 20061015=20 > (prerelease) (Debian 4.1.1-16.1)] on linux2 Type "help",=20 > "copyright", "credits" or "license" for more information. > >>> a =3D ['my', 'copy', 'test'] > >>> a > ['my', 'copy', 'test'] > >>> b =3D list( a ) > >>> b > ['my', 'copy', 'test'] > >>> a.reverse() > >>> a > ['test', 'copy', 'my'] > >>> b > ['my', 'copy', 'test'] > >>> a is b > False >=20 > Roberto |
From: Roberto V. <rvi...@mk...> - 2007-04-06 16:03:50
|
Clark -- I used copy.copy in the meantime, but that works too! Thanks for the input. Roberto On Friday 06 April 2007 11:32, Updike, Clark wrote: > It appears to have changed from jython 2.1 to 2.2. However, you can do > L2 = l1[:] to produce a shallow copy in 2.1: > > Jython 2.1 on java1.5.0_02 (JIT: null) > Type "copyright", "credits" or "license" for more information. > > >>> l1 = [1,2,3] > >>> l2 = list(l1) > >>> l2 is l1 > > 1 > > >>> l2 = l1[:] > >>> l2 is l1 > > 0 > > >>> l2 == l1 > > 1 > > > -Clark > > > Sent: Friday, April 06, 2007 6:40 AM > > To: jyt...@li... > > Subject: [Jython-users] list() behavior > > > > All -- > > > > In jython, if 'list1' is a list, should 'list2 = list( list1 > > )' provide a shallow copy as it does in python? At least in > > 2.1, it seems to provide just an alias. Assuming this isn't > > a bug (typically they aren't), can someone explain the > > difference in behavior? I don't seem to recall reading > > anything about it... Below are the same code for both jython > > and python: > > > > Jython 2.1 on java1.5.0_09 (JIT: null) > > Type "copyright", "credits" or "license" for more information. > > > > >>> a = ['my', 'copy', 'test'] > > >>> a > > > > ['my', 'copy', 'test'] > > > > >>> b = list( a ) > > >>> b > > > > ['my', 'copy', 'test'] > > > > >>> a.reverse() > > >>> a > > > > ['test', 'copy', 'my'] > > > > >>> b > > > > ['test', 'copy', 'my'] > > > > >>> a is b > > > > 1 > > > > > > Python 2.4.4 (#2, Oct 20 2006, 00:23:25) [GCC 4.1.2 20061015 > > (prerelease) (Debian 4.1.1-16.1)] on linux2 Type "help", > > "copyright", "credits" or "license" for more information. > > > > >>> a = ['my', 'copy', 'test'] > > >>> a > > > > ['my', 'copy', 'test'] > > > > >>> b = list( a ) > > >>> b > > > > ['my', 'copy', 'test'] > > > > >>> a.reverse() > > >>> a > > > > ['test', 'copy', 'my'] > > > > >>> b > > > > ['my', 'copy', 'test'] > > > > >>> a is b > > > > False > > > > Roberto |
From: Samuele P. <ped...@op...> - 2007-04-06 16:10:21
|
Updike, Clark wrote: > It appears to have changed from jython 2.1 to 2.2. However, you can do > L2 = l1[:] to produce a shallow copy in 2.1: > it was indeed a bug, which went unnoticed for a long time because people tended to use the idiomatic [:]; it is fixed now. > Jython 2.1 on java1.5.0_02 (JIT: null) > Type "copyright", "credits" or "license" for more information. > >>>> l1 = [1,2,3] >>>> l2 = list(l1) >>>> l2 is l1 >>>> > 1 > >>>> l2 = l1[:] >>>> l2 is l1 >>>> > 0 > >>>> l2 == l1 >>>> > 1 > > > -Clark > > >> Sent: Friday, April 06, 2007 6:40 AM >> To: jyt...@li... >> Subject: [Jython-users] list() behavior >> >> All -- >> >> In jython, if 'list1' is a list, should 'list2 = list( list1 >> )' provide a shallow copy as it does in python? At least in >> 2.1, it seems to provide just an alias. Assuming this isn't >> a bug (typically they aren't), can someone explain the >> difference in behavior? I don't seem to recall reading >> anything about it... Below are the same code for both jython >> and python: >> >> Jython 2.1 on java1.5.0_09 (JIT: null) >> Type "copyright", "credits" or "license" for more information. >> >>>>> a = ['my', 'copy', 'test'] >>>>> a >>>>> >> ['my', 'copy', 'test'] >> >>>>> b = list( a ) >>>>> b >>>>> >> ['my', 'copy', 'test'] >> >>>>> a.reverse() >>>>> a >>>>> >> ['test', 'copy', 'my'] >> >>>>> b >>>>> >> ['test', 'copy', 'my'] >> >>>>> a is b >>>>> >> 1 >> >> >> Python 2.4.4 (#2, Oct 20 2006, 00:23:25) [GCC 4.1.2 20061015 >> (prerelease) (Debian 4.1.1-16.1)] on linux2 Type "help", >> "copyright", "credits" or "license" for more information. >> >>>>> a = ['my', 'copy', 'test'] >>>>> a >>>>> >> ['my', 'copy', 'test'] >> >>>>> b = list( a ) >>>>> b >>>>> >> ['my', 'copy', 'test'] >> >>>>> a.reverse() >>>>> a >>>>> >> ['test', 'copy', 'my'] >> >>>>> b >>>>> >> ['my', 'copy', 'test'] >> >>>>> a is b >>>>> >> False >> >> Roberto >> > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > |
From: Roberto V. <rvi...@mk...> - 2007-04-06 16:17:28
|
On Friday 06 April 2007 12:10, Samuele Pedroni wrote: > Updike, Clark wrote: > > It appears to have changed from jython 2.1 to 2.2. However, you can do > > L2 = l1[:] to produce a shallow copy in 2.1: > > it was indeed a bug, which went unnoticed for a long time because people > tended to use > the idiomatic [:]; it is fixed now. Okay, great. I'm relatively new to the python side of things, so wasn't familiar with the idiom. Thanks for the feedback. Roberto |