tgoop.com/pyHints/865
Create:
Last Update:
Last Update:
#Quick
سوال مصاحبه یکی از دوستان بوده.
توی مصاحبه خیلی از زبانهای برنامهنویسی مختلف یکی از سوالاتی که پرسیده میشه مربوط به نحوه ارسال آرگومان به توابع هست اکثرا هم شما به یکی از دو حالت:
Pass by Value
Pass by Reference
اشاره میکنید؛ اما توی پایتون اینطوری نیست توی پایتون ما
Pass By Object Reference (Pass by Assignment)
رو داریم. اول برگردیم به این تعریف که:
همه چیز در پایتون نهایتا object هست.
وقتی یک آرگومان رو به تابع میدید؛ رفرنس اون آبجکت رو براش میفرستید و نه یک کپی از اون رو ولی این رفرنس رو بصورت pass by value میفرستید! گیج گننده شد؟ برای همین میگیم پایتون نه Pass By Reference هست نه Pass By Value
یک صندوق رو فرض کنید که توش وسایل شما قرار داره (این حکم object رو داره) حالا فرض کنید برای اینکه جاش رو یادتون نره آدرسش رو روی یک کاغذ نوشتید و توی جیبتون میذارید (این میشه reference شما)
یکی از دوستانتون میخواد صندوق رو ببینه؛ شما فقط کافیه آدرس رو بهش بدید که برای اینکار شما آدرس رو روی یک کاغذ جدید مینویسید و اون رو بهش میدید (این میشه Pass reference by Value)
و این میشه مدل پایتون؛ اگر رفیق شما بره اونجا و از داخل صندوق چیزی برداره یا تغییراتی روی صندوق انجام بده؛ شما هم اون تغییرات رو خواهید دید. اگرم که صندوق رو ببینه و کارش که تموم شد کاغذ آدرس صندوق رو بندازه دور اونوقت صندوق هنوز سرجاش خواهد بود و شما صاحبش هستید.
اگر بره از صندوق یدونه بسازه؛ صندوق شما تغییری نمیکنه فقط یکی دیگه مشابهش وجود داره (که ممکنه چیزایی که داخلش هست فرق کنه)
مثال بالا میشه برای Object هایی که قابل تغییر هستند مثل list
اما اگر Object قابل تغییر نبود چی ؟ مثل Int
اونوقت رفیق شما هر تغییری که بخواد بده اول باید ی دونه از روی چیزی که مال شما هست برای خودش بسازه بعد تغییرش بده.
def demonstrate_passing_behavior(my_list, my_int):
print("\n--- INSIDE FUNCTION ---")
print(f"List ID: {id(my_list)}, Int ID: {id(my_int)}")
my_list.append(4)
print(f"List after append: {my_list}, ID(append): {id(my_list)}")
print("Copy of the original list")
my_list = list(my_list)
print(f"List copy and reassignment: {my_list}, ID(copy): {id(my_list)}")
print("Modifying integer...")
my_int = my_int + 10
print(f"Int after modification: {my_int}, ID(modified) : {id(my_int)}")
original_list = [1, 2, 3]
original_int = 5
print(f"Original list: {original_list}, ID: {id(original_list)}")
print(f"Original int: {original_int}, ID: {id(original_int)}")
demonstrate_passing_behavior(original_list, original_int)
print("\n--- AFTER FUNCTION CALL ---")
print(f"Original list: {original_list}, ID: {id(original_list)}")
print(f"Original int: {original_int}, ID: {id(original_int)}")
BY Python Hints
Share with your friend now:
tgoop.com/pyHints/865