Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

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


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
4759 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, 88, 89, 90, 91, 92, 93, 94, 95, 96 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., 2024: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2921_.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb