تقنية

deepcopy في بايثون: هل تبقى الطريقة مرتبطة بالكائن الأصلي؟

method=own.read; own.n=4; deep=deepcopy(method); deep.__self__ is own:False; deep.__func__ is method.__func__:True; deep():4
كائن مختلف ودالة واحدة.

deepcopy للطريقة تنسخ الكائن المرتبط بها في مثالنا، وتحتفظ بالدالة نفسها. [1] [2]

الخلاصة السريعة

لا؛ الارتباط بكائن منسوخ هنا. [1] [2]

  • deepcopy للطريقة تنسخ الكائن المرتبط بها في مثالنا، وتحتفظ بالدالة نفسها. [1] [2]
  • على CPython 3.12.14، كائن Node يحمل n=4؛ read تعيد n، وmethod=own.read. [1] [2]
  • deep.__self__ is own تعطي False، وdeep.__func__ is method.__func__ تعطي True؛ ناتج deep() هو 4. [1] [2]
  • التنفيذ يحتفظ بـ__func__ وينسخ __self__ عميقًا. بعد own.n=9، تعطي method() العدد 9 وdeep() العدد 4. [1] [2]
  • مقارنة: copy(method) تبقى مرتبطة بـown وتعطي 9 بعد التعديل. المثال لطريقة بايثون عادية دون نسخ مخصص؛ لا نعمم على الطرق المدمجة. [1] [2]

ارتباط جديد

deepcopy للطريقة تنسخ الكائن المرتبط بها في مثالنا، وتحتفظ بالدالة نفسها. [1] [2]

طريقة المثال

على CPython 3.12.14، كائن Node يحمل n=4؛ read تعيد n، وmethod=own.read. [1] [2]

الهوية

deep.__self__ is own تعطي False، وdeep.__func__ is method.__func__ تعطي True؛ ناتج deep() هو 4. [1] [2]

from copy import copy,deepcopy class Node: def __init__(self,n):self.n=n def read(self):return self.n own=Node(4);method=own.read deep=deepcopy(method);shallow=copy(method) print(deep.__self__ is own, deep.__func__ is method.__func__,deep()) [1] [2]

method=own.read; shallow=copy(method); own.n=9; method():9; deep():4; shallow.__self__ is own:True; shallow():9
أثر التعديل.

التعديل والمقارنة

التنفيذ يحتفظ بـ__func__ وينسخ __self__ عميقًا. بعد own.n=9، تعطي method() العدد 9 وdeep() العدد 4. [1] [2]

own.n=9 print(method(),deep()) print(shallow.__self__ is own,shallow()) [1] [2]

مقارنة: copy(method) تبقى مرتبطة بـown وتعطي 9 بعد التعديل. المثال لطريقة بايثون عادية دون نسخ مخصص؛ لا نعمم على الطرق المدمجة. [1] [2]

المراجع

  1. Python copy
  2. CPython copy

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.