অজগর: একটি তালিকায় একটি অভিধান যুক্ত করা - আমি আচরণের মতো পয়েন্টার দেখি


88

অজগর দোভাষীর মধ্যে আমি নিম্নলিখিতটি চেষ্টা করেছি:

>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>

এখানে 'বি' অভিধানটি 'এ' তালিকাতে যুক্ত করার পরে, আমি অভিধান 'ক' এর মূল 1 এর সাথে মানটি পরিবর্তন করছি। কোনওভাবে এই পরিবর্তনটি তালিকায়ও প্রতিফলিত হয়। আমি যখন একটি তালিকায় একটি অভিধান যুক্ত করি তখন আমি কি কেবল অভিধানের মান সংযোজন করি না? দেখে মনে হচ্ছে যেন আমি তালিকায় অভিধানের একটি পয়েন্টার যুক্ত করেছি এবং তাই অভিধানের পরিবর্তনগুলিও তালিকায় প্রতিফলিত হচ্ছে।

পরিবর্তনটি তালিকায় প্রতিবিম্বিত হোক তা আমি চাই না। আমি এটা কিভাবে করব?

সময় দেয়ার জন্য ধন্যবাদ!


চেখভ এটা নয় অভিধান 'খ' , এটা হয় অভিধান খ বা নাম 'খ' এর অভিধান । যাইহোক, আপনি ভুল সহকারে লিখেছেন: "আমি অভিধান 'এ' এর মূল 1 এর সাথে মানটি পরিবর্তন করছি" না, অভিধান খ। আপনার বিস্ময় সম্পর্কিত: একটি তালিকা মান রাখে না, এটি বস্তু ধারণ করে, যেহেতু পাইথনের সমস্ত বস্তু। বা আরও ঠিক একটি তালিকাতে বস্তুর উল্লেখ রয়েছে।
আইকাম

(: চেখভ আপনি এই প্রশ্ন দেখতে পাবেন stackoverflow.com/questions/5242933/... )
eyquem

@eyquem আপনার মন্তব্যের জন্য ধন্যবাদ। আমি তাড়াহুড়ো করে এই পোস্ট করছিলাম। আমার ক্ষমা।
নিও 29

চেখভ এটি কোনও তিরস্কার নয়, এটি কেবল তথ্য ছিল। যাইহোক, আমার উত্তরটি যদি কিছুটা কার্যকর হয় তবে এটি আপগ্রেটেড হতে পারে। এছাড়াও, আপনি উত্তরগুলির মধ্যে একটি উত্তর "গ্রহণ" চয়ন করতে পারেন, একটি উত্তরের বামে পয়েন্টের কাউন্টারের নীচে শেভ্রন আকৃতির স্ট্রাইপে ক্লিক করে এটি 25 পয়েন্ট অর্জন করবে। অথবা আপনি কোনও প্রশ্ন না মানতে বেছে নিতে পারেন।
আইকোম

উত্তর:


145

আপনি সঠিক যে আপনার তালিকায় মূল অভিধানে একটি উল্লেখ রয়েছে ।

a.append(b.copy()) কৌতুক করা উচিত।

মনে রাখবেন যে এটি অগভীর অনুলিপি তৈরি করে। একটি বিকল্প ব্যবহার করা হয় copy.deepcopy(b), যা একটি গভীর অনুলিপি তৈরি করে।


6
অসাধারণ! আমি এতে দীর্ঘদিন ধরে অবরুদ্ধ ছিলাম
ইয়াসিন

4
আমি ছেড়ে না দিয়ে এবং স্ট্যাক চেক আউট করার সিদ্ধান্ত না নেওয়া পর্যন্ত এটি প্রায় আধা ঘন্টা আমার মনকে ঘিরে রেখেছে।
ফ্লাইংজেব্রা 1

35

ডিকের সাথেও

a = []
b = {1:'one'}

a.append(dict(b))
print a
b[1]='iuqsdgf'
print a

ফলাফল

[{1: 'one'}]
[{1: 'one'}]

এটি অনুলিপি () হিসাবে যথেষ্ট দ্রুত কিনা তা নিশ্চিত নন তবে এটি ডিপকপি () এর চেয়ে দ্রুত গতিতে বলে মনে হচ্ছে। জটিল অভিধানের স্কীমার সাহায্যে এটি ডিপকপি () এর নিকটবর্তী হবে কারণ ডিক () একটি নতুন অভিধান তৈরি করে।
সেলোটেক

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.