内存 - Python list内容的改变问题
怪我咯
怪我咯 2017-04-17 15:46:44
0
3
266

Pyhton 新手。
今天看教程的时候实验了如下代码:

old = 'abc'
old.replace('a','A')
print old

这里old 并没有被替换,这个我可以理解,因为replace方法返回了一个新的对象,old仍指向原对象。
所以打印的仍然是abc

替换成:

old = 'abc'
new = old.replace('a','A')
print new

即可。
结果就是Abc了。

但是,又想到了这个问题,代码如下:

stu1 = 'Tom'
stu2 = 'John'

classMates = [stu1,stu2]

print classMates

stu2 = 'Marry'

print classMates

结果却是:
['Tom','John']
['Tom','John']

而不是预期的:
['Tom','John']
['Tom','Marry']

如果再对list赋值一次:

classMates = [stu1,stu2]

就可以得到想要的效果。

所以想问的是list创建的时候指向的是stu1和stu2的位置么,为什么stu2中的内容变了list中的不会变呢?
还是像最开始的那个例子一样,产生了一个新的list?现在的classMates没有指向更改后的list而是还是指向原来的list?

谢谢!

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信(3)
巴扎黑

Python の代入操作が何を意味するのかを知る必要があります:

a = b などの最も単純な割り当ては、b によって参照されるオブジェクトを名前 a に関連付け、名前 a を使用してオブジェクトを参照できるようにすることです。

つまり、コードの意味は次のとおりです:

リーリー

stu2 には内容はなく、名前だけです。名前はオブジェクトを参照できます。

暗記するのではなく理解しましょう! Python は C ではありません! C++ でもありません。

関連する返信を投稿するのを忘れていました。

いいねを押す +0
伊谢尔伦

リーリー

これら 2 つの文は、2 つの文字列オブジェクト「Tom」と「John」を作成し、これら 2 つのオブジェクトの参照を stu1 と stu2 に割り当てます。

リーリー

2 つの文字列オブジェクトはリストの要素となり、参照カウントはそれぞれ +1、つまり 2 になります

リーリー

「ジョン」参照カウント -1 「結婚」参照カウント +1

いいねを押す +0
小葫芦

リーリー

リストと変数の違いを思い出してください。リストを引用します。 list と list2 は両方とも同じアドレスを指します
変数は参照されません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!