x=1
m=x
m+=2
print(x)
#输出结果为1,说明x不因m的改变而改变
x=[1,2]
m=x
m.append(3)
print(x)
#输出结果为[1,2,3],说明x因m的改变而改变
为何当参数为整数、列表时,出现两种截然相反的情况?
按照赋值的意义,赋值之后,不论m如何改变,都不会影响x的值,那么第二种情况“=”表示的不是赋值吗?
还是我哪里写错了?
恳请指教。
x=1
m=x
m+=2
print(x)
#输出结果为1,说明x不因m的改变而改变
x=[1,2]
m=x
m.append(3)
print(x)
#输出结果为[1,2,3],说明x因m的改变而改变
为何当参数为整数、列表时,出现两种截然相反的情况?
按照赋值的意义,赋值之后,不论m如何改变,都不会影响x的值,那么第二种情况“=”表示的不是赋值吗?
还是我哪里写错了?
恳请指教。
m.append(3)是改变列表中的元素
m的值本身没有改变
列表是按地址传递的。
当把一个列表从一个变量传递到另一个变量中时,两个变量都指向这同一个列表的地址。
比如
a=[1,2];
b=a #a和b变量都指向同一个列表的地址。
print(id(a),id(b)) #两个变量指向同一个地址
当对列表的属性赋值时,实际上是先读取变量中的地址找到列表,再改变这个列表的属性。
这样之后再用另一个变量中的地址所找到的也是这同一个列表,会获取到一样的列表内容。
b[1]=3;
print(b[1]) #输出 3
print(a[1]) #输出 3
只有用b=a.copy() 产生一个新列表赋值给b,让a和b变量指向不同的列表地址。
两个列表才能互不影响。
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!