A muttable object is one which can be changed in situ, and an immutable object is one that can't be changed in situ - if you want a modified version, you have to build it afresh, using whichever components you require from the orginal. And if the original's not required, you can then scrap it.
There's a tendency for heavily object oriented languages to use immutable obects for simple data types, and muttable ones for more complex types. Thus Python's strings are immutable and Python's dicts are muttable. And this makes sense from a language design viewpoint; the internal structure of a muttable object needs to be more complex than the internal structure of an immutable one, and it will be slower to handle. Thus a tradeoff between complexity and flexibility which goes one way with the simpler object structures, and the other way with more complex object structures.
Does this all matter to the programmer using the language?
Yes, it does. On yesterday's
Ruby course, we set up two obejects containing identical data, and we tested if they were euqal - using the
equal? method which tests if they're one and the same object. With a simple object (an integer), Ruby uses an immutable object and we ended up with two names of the same immutable structure - that's efficiency for you. But when we set up two arrays containing idential (the same) objects, these were muttable, and different ... and we got the opposite result from
equal?.
As long as you're aware ... this muttable v immutable, and how it effects the language you're using isn't a problem. But without the knowledge of what's what, you can end us with little surprises when you test for equallity. Equallity is not as simple a concept as it sounds. Just like in real life!
Sample source - Ruby:
Simple object - immutable
More complex object - muttable (written 2012-06-20, updated 2012-06-23)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
R104 - Ruby - Control Structures [960] 1st, 2nd, 3rd revisited in Ruby - (2006-12-02)
[962] Breaking a loop - Ruby and other languages - (2006-12-03)
[985] Equality in Ruby - == eql? and equal? - (2006-12-14)
[995] Ruby's case - no break - (2006-12-17)
[1163] A better alternative to cutting and pasting code - (2007-04-26)
[1220] for loop - how it works (Perl, PHP, Java, C, etc) - (2007-06-06)
[1582] Ruby, C, Java and more - getting out of loops - (2008-03-19)
[1587] Some Ruby programming examples from our course - (2008-03-21)
[1696] Saying NOT in Perl, PHP, Python, Lua ... - (2008-07-04)
[1738] Clean code, jump free (Example in Lua) - (2008-08-06)
[1870] What to do with a huge crop of apples - (2008-11-04)
[1887] Ruby Programming Course - Saturday and Sunday - (2008-11-16)
[1891] Ruby to access web services - (2008-11-16)
[1904] Ruby, Perl, Linux, MySQL - some training notes - (2008-11-23)
[2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)
[2471] A short form of if ... then ... else - (2009-10-23)
[2619] Passing code to procedures and yield in Ruby - (2010-02-02)
[2711] For loop - checked once, or evety time? Ruby v Perl comparison and contrast - (2010-04-07)
[2892] Alternative loops and conditionals in Ruby and Perl - (2010-07-28)
[2975] Why do I need brackets in Ruby ... or Perl, Python, C or Java - (2010-09-29)
[3156] Splitting data reading code from data processing code - Ruby - (2011-02-04)
[3158] Ruby training - some fresh examples for string handling applications - (2011-02-05)
[3159] Returning multiple values from a function call in various languages - a comparison - (2011-02-06)
[3200] How a for loop works Java, Perl and other languages - (2011-03-12)
[3253] Is this number between? Does this list include? - Ruby - (2011-04-18)
[3254] Multiple inputs, multiple out, ruby functions - (2011-04-19)
[3397] Does a for loop evaluate its end condition once, or on every iteration? - (2011-08-18)
[3422] Assigning values to variables within other statements - Ruby - (2011-09-07)
[3619] Ruby v Perl - a comparison example - (2012-02-21)
[3620] Finding the total, average, minimum and maximum in a program - (2012-02-22)
[4322] Learning to Program - the conditional statement (if) - (2014-11-21)
[4323] Learning to program - Loop statements such as while - (2014-11-22)
[4370] Conditionals, loops and methods in Ruby - a primer with simple examples - (2014-12-29)
[4402] Finding sum, minimum, maximum and average in Python (and Ruby) - (2015-01-19)
[4503] Separating your code for easier testing, understanding and re-use; example in Ruby - (2015-06-02)
[4504] Where does Ruby load modules from, and how to load from current directory - (2015-06-03)
[4674] Alternating valuses / flip-flop / toggle - example in Ruby - (2016-05-17)
Some other Articles
Ruby on the web - a simple example using CGIHello World - Ruby on Rails - a checklist of each stepFine evening, country walk from Melksham - picturesSample answers to training course exercises - available on our web siteMuttable v immutable and implications - RubyMelksham Chamber of Commerce - looking to our future shape. Pivotal meeting next TuesdayHow well do you know Melksham?Python timing - when to use a list, and when to use a generatorChristmas in June? Melksham hotel bookings and Santa train Shell, Awk, Perl of Python?