楼主正在自学数据结构.写别的练习时遇到了一点小问题.向大家请教.谢谢啦!
在 Python 中,类成员可以直接访问类属性.比如
class A:
a=1
class B(A):
b=6
x=B()
print(x.a)
会显示
1
对类属性的修改会导致通过类成员访问这一属性时发生改变:
class A:
a=1
class B(A):
b=6
x=B()
print(A.a, x.a, x.a is A.a)
A.a = 2
print(A.a,x.a, A.a is x.a)
输出为:
1 1 True
2 2 True
这些我大概还是理解的,但是下面事情变得复杂:
class A:
a=1
class B(A):
b=6
x=B()
print(A.a, x.a, x.a is A.a)
A.a = 2
print(A.a,x.a, A.a is x.a)
x.a = 0
print(A.a,x.a, x.a is A.a)
A.a = 3
print(A.a,x.a, x.a is A.a)
A.a = 0
print(A.a, x.a, A.a is x.a)
print(2 is 2 )
输出为:
1 1 True
2 2 True
2 0 False
3 0 False
0 0 True
True
以及如果使用可变类型赋值
class A:
a=[1]
class B(A):
b=[6]
x=B()
print(A.a, x.a, x.a is A.a)
A.a = [2]
print(A.a,x.a, A.a is x.a)
x.a = [0]
print(A.a,x.a, x.a is A.a)
A.a = [3]
print(A.a,x.a, x.a is A.a)
A.a = [0]
print(A.a, x.a, A.a is x.a)
print([2] is [2] )
会显示:
[1] [1] True
[2] [2] True
[2] [0] False
[3] [0] False
[0] [0] False
False
我的问题:
1.为什么会产生这种区别?
2.用代码
x.a = 0
和
x.a = [0]
改变类成员属性时发生了什么呢?为什么不会改变类属性 A.a 呢?
3.在修改过 x.a 后,修改 A.a 就不会影响 x.a 了,这是为什么呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.