Yaleで、遊んで学ぶ日々。
Yaleで、遊んで学ぶ日々。
囲碁、ときどきプログラミング、ところにより経済。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Pythonを使い始めてしばらく経つが、初めて参照と値の違いによるバグが生じた。次のA-Cの結果はそれぞれどうなるだろうか。
# (A)
答えは、
(A): ['a0', 'a1', 'a2', 'a3', 'a4']
(B): [['a0'], ['a1'], ['a2'], ['a3'], ['a4']]
(C) については、xの各要素がすべて同じsを参照しているため、sの値を変えるたびにそれがxに反映されてしまう。
一方(B)では、forループ内で毎回sを定義しなおしているので、xの各要素はそれぞれ異なるモノを参照している。
他にも色々試してみる。
次のコードの場合、xへの変更はyに反映されない。
この場合も、反映されない。
ということは、y = x という形の場合は参照になるが、y = x[j] という形の場合は値の代入になるのかな。あるいは、x[j]と書いた瞬間にその要素の複製を作っているので、これはx本体とは区別されるということだろうか。
# (A)
x = []
s = ""
for i in range(5):
s = "a" + str(i)
x.append(s)
print x
# (C)
# (B)
x = []
s = [""]
for i in range(5):
s = [ "a" + str(i) ]
x.append(s)
print x
x = []
s = [""]
for i in range(5):
s[0] = "a" + str(i)
x.append(s)
print x
答えは、
(A): ['a0', 'a1', 'a2', 'a3', 'a4']
(B): [['a0'], ['a1'], ['a2'], ['a3'], ['a4']]
(C): [['a4'], ['a4'], ['a4'], ['a4'], ['a4']]
一方(B)では、forループ内で毎回sを定義しなおしているので、xの各要素はそれぞれ異なるモノを参照している。
他にも色々試してみる。
次のコードの場合、xへの変更はyに反映されない。
x = [["a"], ["b"], ["c"]]
y = [[""], [""] , [""]]
for i in range(3):
y[i] = x[i]
print "x", x, "y", y
x[0] = ["d"]
print "x", x, "y", y
この場合も、反映されない。
x = [["a"], ["b"], ["c"]]
y = x[0]
print "x", x, "y", y
x[0] = ["d"]
print "x", x, "y", y
ということは、y = x という形の場合は参照になるが、y = x[j] という形の場合は値の代入になるのかな。あるいは、x[j]と書いた瞬間にその要素の複製を作っているので、これはx本体とは区別されるということだろうか。
PR
Calender
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Search in This Blog
Latest Comments
[03/30 川内のばば山田]
[03/30 川内のばば山田]
[08/06 Aterarie]
[07/05 Agazoger]
[07/01 Thomaskina]
Latest Posts
(11/16)
(04/28)
(04/16)
(04/11)
(04/05)
Latest Trackbacks
Category
Access Analysis