Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #69757
| References | <89df32f9-c8ae-4b7b-bfc4-01c574aabcae@googlegroups.com> <53410185.6050304@islandtraining.com> <CABicbJK=Fw+m9pjgm9Ng=h=if38YL6uo4ibgiA43S6ohV9XUKg@mail.gmail.com> |
|---|---|
| Date | 2014-04-06 18:25 +1000 |
| Subject | Re: Mutable objects inside tuples - good or bad? |
| From | Chris Angelico <rosuav@gmail.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.8944.1396772745.18130.python-list@python.org> (permalink) |
On Sun, Apr 6, 2014 at 5:55 PM, Devin Jeanpierre <jeanpierreda@gmail.com> wrote: > On Sun, Apr 6, 2014 at 12:25 AM, Gary Herron > <gary.herron@islandtraining.com> wrote: >> On 04/05/2014 11:53 PM, John Ladasky wrote: >>> >>> I find this programming pattern to be useful... but can it cause problems? >> >> No. >> >> What kind of problems are you considering? It won't break Python. It's >> perfectly legal code. > > Agreed. Putting mutable objects inside tuples is common and totally OK. There are many programming habits that can cause problems, even though they won't break Python and are legal code. :) >> The tuple c is still immutable, consisting of two specific objects, and (as >> always) without regard to the specifics or contents of those two objects. > > You can choose to define mutability that way, but in many contexts > you'll find that definition not very useful. > > c is such that you could have another variable d, where the following > interpreter session fragment is easily possible: > >>>> c == d > True >>>> foo(c) >>>> c == d > False What you're looking at here is hashability, not mutability. Compare: >>> a = (1,2,3) >>> hash(a) 2528502973977326415 >>> b = ([1],[2],[3]) >>> hash(b) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list' Both tuples are immutable, but the former is hashable because all its members are hashable, while the latter is not. You can't trust that equality with b is constant: >>> c = ([1],[2],[3]) >>> b == c True >>> b[2][0]=4 >>> b == c False Going back to the original question, though: I do not believe that putting mutable objects inside tuples is a problem. I've done it frequently myself, and it's never caused confusion. So go right ahead, do it if it makes sense! ChrisA
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Mutable objects inside tuples - good or bad? John Ladasky <john_ladasky@sbcglobal.net> - 2014-04-05 23:53 -0700
Re: Mutable objects inside tuples - good or bad? Gary Herron <gary.herron@islandtraining.com> - 2014-04-06 00:25 -0700
Re: Mutable objects inside tuples - good or bad? Devin Jeanpierre <jeanpierreda@gmail.com> - 2014-04-06 00:55 -0700
Re: Mutable objects inside tuples - good or bad? Rustom Mody <rustompmody@gmail.com> - 2014-04-06 08:07 -0700
Re: Mutable objects inside tuples - good or bad? Chris Angelico <rosuav@gmail.com> - 2014-04-06 18:25 +1000
Re: Mutable objects inside tuples - good or bad? Devin Jeanpierre <jeanpierreda@gmail.com> - 2014-04-06 04:01 -0700
Re: Mutable objects inside tuples - good or bad? Paul Kölle <paul@subsignal.org> - 2014-04-07 17:26 +0200
Re: Mutable objects inside tuples - good or bad? Chris Angelico <rosuav@gmail.com> - 2014-04-08 01:44 +1000
Re: Mutable objects inside tuples - good or bad? Paul Kölle <paul@subsignal.org> - 2014-04-07 21:46 +0200
Re: Mutable objects inside tuples - good or bad? Chris Angelico <rosuav@gmail.com> - 2014-04-08 08:47 +1000
Re: Mutable objects inside tuples - good or bad? Terry Reedy <tjreedy@udel.edu> - 2014-04-07 20:16 -0400
Re: Mutable objects inside tuples - good or bad? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-04-08 02:53 +0000
csiph-web