Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
Does copying a variable duplicate the contents?

If I write a regular assignment statement such as:
  $postbag = $mailinglist;
or
  postbag = mailinglist
(depending on the programming language), what am I doing?

"Copying a variable, you plonker!" I hear you saying ... and indeed you're right, but what's really happening? Sometimes, I'll be duplicating the contents of a variable, and other times I'll be simply be providing a second name for the same piece of data stored in memory. Most of the time, your code will run the same way whichever of these things happens, but on some occasions it will make a difference.

In a language such as Python, which is Object Oriented from the core, an assignment of the sort shown above applies a second name to the same piece(s) of information stored on the "heap". And that means that if you run a method that alters the data that either of the names points to, you'll be altering the data that both of the names point to. Here's how I explain that in class:

"Your mother is called Julie Jones. So you refer to her as 'Mum' but I refer to her as 'Mrs_Jones'. Two names, same person. If you pour a tin of bright pink paint over 'Mum' and I then ask about the state of 'Mrs_Jones', I'll get back the answer 'Bright pink and livid' because 'Mum' and 'Mrs_Jones' are one and the same"

There is a slight caution here ... in Python, many of the more primitive object types (and tuples too) are immutable - which means they cannot be altered in-situ. So that although an assignment will leave you with two names for one piece of data, the act of altering it will actually produce a new, different object so (in effect) split the names at that point.

In a language such as Perl 5, an assignment of the sort shown above duplicates that data. If it's a big piece of data, this can be very inefficient. But it means that if you alter the data via one name after you have done the copy, you'll not be altering the data held under the other name. Let's give you an example of that one:

"I have here an original copy (!) of the Magna Carta and it's very valuable. I know you would like to see it and study it in detail, but you have a reputation for drawing all over documents. So I'm going to put it into the photocopier and give you a perfect copy. Then when you put red markings all over it to correct the spelling mistakes that King John made, it's only your copy that you've effected and my precious original remains in tact"


In PHP, the object model changed between version 4 and version 5. So PHP 4 works like Perl 5, and PHP 5 works like Python on objects - that's considered to be the correct way to do things and indeed purists will tell you that PHP 4 is "broken"! There a program from our PHP courses - [here] - which performs differently depending on which version of PHP you're running!




OK - so the copying of the reference is "right" according to the pedantic computer scientists. But what if you want to truely make a duplicate of an object in Python or PHP 5 so that you can amend the copy, starting off with the original as your base. You need to clone the object.

In PHP:
  $nextinlitter = clone $first_adopted;
as opposed to
  $lisas_lurcher = $first_adopted;

There's a complete example showing that on our web site ... [source] and [run it]. And that was updated yesterday(!) and is a subject covered on our Object Oriented Programming in PHP course.

In Python, you can clone an object using the deepcopy function from the copy module; see [source example]. You can also "shallow copy" a list using list slice notation - example [here]; in this case, you're just copying a collections of pointers rather than descending into a whole tree.




Illustrative image - I came across the pink daisy - a public domain picture (but I would like to offer credit [here] to PDPhoto.org - while looking for a picture of a lady covered in pink paint, which turned out to be a fruitless quest!
(written 2010-08-14, updated 2010-08-20)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
H108 - Objects in PHP
  [4073] Learning about Object Orientation in PHP - a new set of examples - (2013-04-28)
  [4057] stdClass in PHP - using an object rather than an associative array - (2013-04-02)
  [3953] Objects in PHP - Revision - (2012-12-16)
  [3843] Caching Design Patterns - (2012-08-20)
  [3841] Copying, duplicating, cloning an object in PHP - (2012-08-18)
  [3840] Autoload in PHP - (2012-08-17)
  [3609] How do classes relate to each other? Associated Classes - (2012-02-12)
  [3608] Design Patterns - what are they? Why use them? - (2012-02-12)
  [3607] Designing your application - using UML techniques - (2012-02-11)
  [3211] Computer Graphics in PHP - World (incoming data) to Pixel (screen) conversion - (2011-03-24)
  [3210] Catchable fatal error in PHP ... How to catch, and alternative solutions such as JSON - (2011-03-22)
  [3142] Private and Public - and things between - (2011-01-22)
  [2922] Getting the OO design write - with PHP a example - (2010-08-14)
  [2774] PHP - Object Oriented Design in use - (2010-05-21)
  [2741] What is a factory? - (2010-04-26)
  [2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
  [2680] Static class members in PHP - a documented example - (2010-03-16)
  [2641] Object Oriented Programming in PHP - (2010-02-19)
  [2632] Shipping a test harness with your class in PHP - (2010-02-12)
  [2435] Serialization - storing and reloading objects - (2009-10-04)
  [2434] Abstract classes, Interfaces, PHP and Java - (2009-10-03)
  [2380] Object Oriented programming - a practical design example - (2009-08-27)
  [2172] PHP4 v PHP5 - Object Model Difference - (2009-05-11)
  [2171] Cleaning up redundant objects - (2009-05-11)
  [2169] When should I use OO techniques? - (2009-05-11)
  [2160] PHP - getclass v instanceof - (2009-05-07)
  [1925] Introduction to Object Oriented Programming - (2008-12-06)
  [1820] Sorting objects in PHP - (2008-10-04)
  [1819] Calling base class constructors - (2008-10-03)
  [1682] Accounts in PHP - an OO demo - (2008-06-19)
  [1535] OO PHP demonstration - comparing objects and more - (2008-02-08)
  [1217] What are factory and singleton classes? - (2007-06-04)
  [1153] Object Oriented Model - a summary of changes from PHP4 to PHP5 - (2007-04-18)
  [1027] Cue the music, I'm happy. - (2007-01-09)
  [836] Build on what you already have with OO - (2006-08-17)
  [720] Planning a hotel refurb - an example of a Gant chart in PHP - (2006-05-14)
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
  [421] Don't repeat code - use loops or functions - (2005-08-21)
  [343] Should I use structured or object oriented? - (2005-06-10)
  [205] PHP5 lets you say no - (2005-02-07)
  [124] PHP v Java - (2004-11-20)
  [67] Object Oriented Programming in PHP - (2004-09-29)


Back to
Sorting - naturally, or into a different order
Previous and next
or
Horse's mouth home
Forward to
Getting the OO design write - with PHP a example
Some other Articles
Well House - the pictures
Job applicants - wondering why they apply
Fresh air and beautiful places in Wiltshire
Does copying a variable duplicate the contents?
Sorting - naturally, or into a different order
London to Calne, Corsham, Melksham, Bradford-on-Avon, Chippenham by public Transport
Downloading a report from the web for further local analysis
Upload Image, Store in database, redisplay in browser. PHP and MySQL
Testing the robustness of our hotel and training systems - holiday and sickness times
4310 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2014: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2921_Doe ... ents-.html • PAGE BUILT: Thu Sep 18 15:30:25 2014 • BUILD SYSTEM: WomanWithCat