যদিও এই মন্তব্য এখানে এবং হিসাবে চিহ্নিত dups সব প্রদর্শিত দুই অন্য কোন প্রশ্ন মানুষের একই ভাবে এই সম্পর্কে বিভ্রান্ত করা যাবে, আমি এটা এর মূল্য উপরে একটি অতিরিক্ত উত্তর যোগ করার চিন্তা অ্যালেক্স কভেন্ট্রি এর ।
তালিকার মতো অ্যালেক্সের কোনও মিউটেবল টাইপের একটি মূল্য নির্ধারণ করা হচ্ছে, বিষয়টি ভাগ করে নেওয়া এবং না করা সম্পর্কিত কিছুই করার নেই। আমরা এটি id
ফাংশন বা is
অপারেটরের মাধ্যমে দেখতে পারি :
>>> class A: foo = object()
>>> a, b = A(), A()
>>> a.foo is b.foo
True
>>> class A:
... def __init__(self): self.foo = object()
>>> a, b = A(), A()
>>> a.foo is b.foo
False
(আপনি যদি ভাবছেন যে আমি কেন এটির object()
পরিবর্তে ব্যবহার করেছিলাম , বলুন, 5
এটি যে দুটি সম্পূর্ণ অন্যান্য ইস্যু আমি এখানে toোকাতে চাই না সেগুলি এড়ানো এড়ানো; দুটি ভিন্ন কারণে সম্পূর্ণ পৃথকভাবে তৈরি 5
হওয়াগুলিই শেষ হয়ে যেতে পারে সংখ্যার একই উদাহরণ 5
But তবে সম্পূর্ণ পৃথকভাবে তৈরি করা object()
গুলি পারে না))
সুতরাং, কেন এটি a.foo.append(5)
অ্যালেক্সের উদাহরণে প্রভাবিত করে b.foo
, তবে a.foo = 5
আমার উদাহরণে তা হয় না? ওয়েল, চেষ্টা a.foo = 5
Alex এর উদাহরণে, এবং বিজ্ঞপ্তি এটি কোনো প্রভাব পড়ে না b.foo
সেখানে পারেন ।
a.foo = 5
শুধু a.foo
জন্য একটি নাম করা হয় 5
। এটি প্রভাবিত করে না b.foo
বা প্রবীণ মানটির জন্য অন্য কোনও নাম যা a.foo
উল্লেখ করা হত * * এটি একটি সামান্য কৌশল যে আমরা একটি উদাহরণের বৈশিষ্ট্য তৈরি করি যা একটি শ্রেণীর বৈশিষ্ট্যকে আড়াল করে, ** তবে আপনি যখন এটি পেয়ে যান, জটিল কিছুই হয় না এখানে ঘটছে।
আশা করি এটি এখন স্পষ্ট যে কেন অ্যালেক্স একটি তালিকা ব্যবহার করেছেন: আপনি যে কোনও তালিকার পরিবর্তন করতে পারবেন তার অর্থ দুটি ভেরিয়েবল একই তালিকার নাম দেখানো আরও সহজ এবং এর অর্থ এটিও যে আপনার দুটি তালিকা রয়েছে বা না তা জানতে রিয়েল-লাইফ কোডে এটি আরও গুরুত্বপূর্ণ একই তালিকার জন্য দুটি নাম।
* সি ++ এর মতো ভাষা থেকে আসা লোকদের জন্য বিভ্রান্তি হ'ল পাইথনে, মানগুলি ভেরিয়েবলগুলিতে সংরক্ষণ করা হয় না। মানগুলি ভ্যালু-ল্যান্ডে লাইভ থাকে, নিজস্বভাবে, ভেরিয়েবলগুলি কেবলমাত্র মানগুলির নাম এবং অ্যাসাইনমেন্ট কেবল একটি মানের জন্য একটি নতুন নাম তৈরি করে। এটি যদি সহায়তা করে তবে প্রতিটি পাইথন ভেরিয়েবলকে এ এর shared_ptr<T>
পরিবর্তে ভাবেন T
।
** কিছু লোক উদাহরণস্বরূপ যে বৈশিষ্ট্যগুলি সেট করতে পারে বা সেট করতে পারে না তার জন্য একটি "ডিফল্ট মান" হিসাবে শ্রেণীর অ্যাট্রিবিউট ব্যবহার করে এটির সুবিধা নেয়। এটি কিছু ক্ষেত্রে কার্যকর হতে পারে তবে এটি বিভ্রান্তিকরও হতে পারে, তাই এটির সাথে সাবধানতা অবলম্বন করুন।