"J Kenneth King" <ja...@agentultra.com> wrote in message
news:87wrtxh0dq....@agentultra.com...
candide <cand...@free.invalid> writes:
Let's the following code :
t=[[0]*2]*3
t
[[0, 0], [0, 0], [0, 0]]
t[0][0]=1
t
[[1, 0], [1, 0], [1, 0]]
Rather surprising, isn't it ?
Not at all, actually.
The code is clearly trying to set only t[0][0] to 1, not t[1][0] and t[2][0]
as well.
This behaviour is quite scary actually, especially when t[0]=42 *does* work
as expected, while t[0][0]=42 is apparently duplicated. It appears
inconsistent.
I'd be surprised if the multiplication operator was aware of object
constructors. Even arrays are "objects" in Python. Should the
multiplication operator know how to instantiate three arrays from a
single array instance? What about an instance of a user-defined class?
Multiplication operators shouldn't need to be directly aware of any such
thing; it should just request that an object be duplicated without worrying
about how it's done.
I don't know how Python does things, but an object should either specify a
special way of duplicating itself, or lend itself to some standard way of
doing so. (So for a list, it's just a question of copying the data in the
list, then recursively duplicating each new element..)
--
Bartc
--
http://mail.python.org/mailman/listinfo/python-list