ถ้าเปรียบหน่วยความจำให้เข้าใจง่ายๆ ก็คงต้องเปรียบเหมือนห้องเก็บของที่มีทั้งขนาดและหมายเลขห้องเพราะเวลาที่เราจะให้ใครไปหยิบของจากห้องเก็บของ เราจะได้บอกเค้าถูกว่าจะต้องไปหยิบจากห้องไหนหรือเวลาที่จะเอาของไปเก็บ ถ้ามีของเยอะๆจะต้องใช้ห้องเก็บกี่ห้องและเลขห้องไหนบ้าง
หน่วยความจำ สิ่งที่คนเขียนโปรแกรมมือใหม่มักจะละเลยและไม่คำนึงถึง แต่สำหรับการเขียนโปรแกรมแล้วเป็นสิ่งที่จะลืมไม่ได้เพราะการเขียนโปรแกรมบางรูปแบบค่อนข้างที่จะต้องคำนึงถึงเรื่องการใช้งานหน่วยความจำ ตัวอย่างเช่น
//Programming Language : C# Lista = new List (){1, 2, 3}; List b = a; b.RemoveAt(0); //Remove data index 0. //Result a = 2, 3 b = 2, 3
จากตัวอย่างโค๊ดจะเห็นว่ามีลิสต์อยู่สองลิสต์คือ a และ b จากนั้นจะให้ลิสต์ b เท่ากับ a แล้วทำการลบข้อมูลในลิสต์ b ที่ตำแหน่ง index 0 พบว่าผลลัพธ์ของลิสต์ a คือ 2,3 และลิสต์ b คือ 2,3 เอ๊ะ ! เราไม่ได้ทำอะไรกับลิสต์ a นี่หว่าแล้วมันหายไปได้ยังไง ?
ในกรณีข้างต้นนี้ ผมจะอธิบายประกอบภาพเผื่อจะเข้าใจได้ง่ายขึ้น สมมติว่าเรามีลิสต์ a ซึ่งในนั้นก็มีข้อมูลอยู่ 3 ข้อมูลคือ (1,2,3) ข้อมูลถูกเก็บอยู่ในหน่วยความจำตำแหน่ง 000-002 ตามลำดับ ต่อมาเราได้ให้ลิสต์ b = a ซึ่งเราอาจจะต้องการให้ก๊อปปี้ข้อมูลจากลิสต์ a มาใส่ลิสต์ b แต่โปรแกรมมันจะมองว่าเราต้องการให้ลิสต์ b กระทำการใดๆกับข้อมูลที่ตำแหน่งเดียวกับลิสต์ a ดังนั้นเมื่อเราสั่งลบข้อมูลที่ index 0 ของลิสต์ b ก็คือการลบข้อมูลที่ตำแหน่ง 000 (ที่เราสมมติขึ้น) ซึ่งจะทำให้ข้อมูลที่ลิสต์ a เข้าถึงถูกลบไปด้วย งงป่ะ ? 55+
ดังนั้นหากเราต้องการก๊อปปี้ลิสต์ a มาใส่ลิสต์ b โดยให้ใช้ที่อยู่ของหน่วยความจำคนละตำแหน่งกันกับลิสต์ a สามารถเขียนโค๊ดได้ดังนี้
//Programming Language : C# Lista = new List (){1, 2, 3}; List b = new List (a); b.RemoveAt(0); //Remove data index 0. //Result a = 1, 2, 3 b = 2, 3