Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การดำเนินการ Python Shallow และ Deep Copy


ใน Python มีโมดูลที่เรียกว่า copy . เมื่อใช้โมดูลนี้ เราสามารถทำการคัดลอกแบบลึกและแบบตื้นได้ ใน python คำสั่งการมอบหมายจะไม่คัดลอกวัตถุ พวกมันสร้างการเชื่อมโยงระหว่างเป้าหมายกับวัตถุหลัก

ในการใช้โมดูลนี้ เราควรนำเข้าโดยใช้ −

import copy

วิธีการ copy.copy(x)

วิธีนี้ใช้เพื่อสร้างสำเนาตื้นของวัตถุ x สำหรับสำเนาตื้น การอ้างอิงของวัตถุจะถูกคัดลอกไปยังวัตถุอื่น ดังนั้นหากมีการเปลี่ยนแปลงใด ๆ ในการอ้างอิงที่คัดลอกก็จะเปลี่ยนเนื้อหาของวัตถุหลัก

วิธีการ copy.deepcopy(x)

วิธีนี้ใช้เพื่อสร้างสำเนาลึกของวัตถุ x สำหรับ Deep Copy วัตถุแต่ละชิ้นจะถูกสร้างขึ้นโดยใช้ข้อมูลจากวัตถุหลัก ดังนั้นหากมีการเปลี่ยนแปลงใด ๆ ในการอ้างอิงที่คัดลอกมา วัตถุหลักจะยังคงเหมือนเดิม

โค้ดตัวอย่าง

import copy
my_mat = [[11,22,33],[44,55,66],[11,22,33]]
print('Matrix Before Updation: ' + str(my_mat))
new_mat = copy.copy(my_mat) #Make a shallow copy and update on copied object
new_mat[2][0] = 77
new_mat[2][1] = 88
new_mat[2][2] = 99
print('Matrix After Updation: ' + str(my_mat)) #Original Matrix Updated
my_mat = [[11,22,33],[44,55,66],[11,22,33]]
new_mat_deep = copy.deepcopy(new_mat)
print('\nMatrix Before Updation: ' + str(my_mat))
new_mat_deep[2][0] = 77
new_mat_deep[2][1] = 88
new_mat_deep[2][2] = 99
print('Matrix After Updation: ' + str(my_mat)) # Original Matrix unchanged
print('New Matrix: ' + str(new_mat_deep)) # Original Matrix unchanged

ผลลัพธ์

Matrix Before Updation: [[11, 22, 33], [44, 55, 66], [11, 22, 33]]
Matrix After Updation: [[11, 22, 33], [44, 55, 66], [77, 88, 99]]

Matrix Before Updation: [[11, 22, 33], [44, 55, 66], [11, 22, 33]]
Matrix After Updation: [[11, 22, 33], [44, 55, 66], [11, 22, 33]]
New Matrix: [[11, 22, 33], [44, 55, 66], [77, 88, 99]]