首页 > 解决方案 > 类中的python列表范围

问题描述

我遇到了这段代码的一些意外行为:

from pprint import pprint

class a (object):
    x = ['1']

class b (a):
    x = a.x
    x.append('2')

class c (a):
    x = a.x
    x.append('3')

class d (a):
    x = a.x
    x = 'nothing'

if __name__ == '__main__':
    pprint(a.x)
    pprint(b.x)
    pprint(c.x)
    pprint(d.x)

我收到输出:

['1', '2', '3']
['1', '2', '3']
['1', '2', '3']
'nothing'

但我希望收到:

['1']
['1', '2']
['1', '3']
'nothing'

我不明白的是:

  1. 为什么附加到 b 类的列表也会附加到 a 类的列表?
  2. 为什么追加到类 c 中的该列表追加到 b 和 a?
  3. 为什么不将该变量重新分配给 d 类中的字符串对其他 3 个类没有影响?

标签: pythonpython-3.x

解决方案


1. 2.执行此操作时,x = a.x您只是分配x指向唯一现有的列表,a在操作此时,来自 so的那个会x反映,a.x因为这是同一个列表,而不是副本。class b这对于和都是正确的class c。做一个副本

x = list(a.x)

3.x='nothing'你分配一个x不再指向列表的字符串时,就是这样


推荐阅读