首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python [set()]中的类变量

Python [set()]中的类变量
EN

Stack Overflow用户
提问于 2012-10-21 22:47:38
回答 1查看 151关注 0票数 0

为什么set对于python中的类变量的行为与字典不同。例如,

代码语言:javascript
复制
class Test1:
   x=set()
   y={}

hamster=Test1()
chinchilla=Test1()
hamster.x.add('hi')  # now both sets in both instances have 'hi'
hamster.y['key']=5   # only the hamster instance will contain 5

(谢谢你的帮助:)

编辑:我还注意到,如果在self.x=set init()中定义(),可以避免向这两个实例添加的问题。删除了打印

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-21 22:56:03

不,你错了,两个都有key:5

代码语言:javascript
复制
In [56]: class Test1:
   ....:        x=set()
   ....:    y={}
   ....: 

In [57]: hamster=Test1()

In [58]: chinchilla=Test1()

In [59]: hamster.x.add('hi')  # now both sets in both instances have 'hi'

In [60]: hamster.y['key']=5

In [62]: hamster.x,chinchilla.x
Out[62]: (set(['hi']), set(['hi']))

In [63]: hamster.y,chinchilla.y
Out[63]: ({'key': 5}, {'key': 5})

实际上,在代码中,您不是在更改实例变量,而是在更改类变量:

代码语言:javascript
复制
In [65]: Test1.x
Out[65]: set(['hi'])

In [66]: Test1.y
Out[66]: {'key': 5}

您需要在这里使用实例变量:

代码语言:javascript
复制
In [71]: class Test1():
    def __init__(self):
        self.x=set()
        self.y={}
   ....:         
   ....:         

In [75]: hamster=Test1()

In [76]: chinchilla=Test1()

In [77]: hamster.x.add('hi')

In [78]: chinchilla.x.add('bye')

In [79]: hamster.x
Out[79]: set(['hi'])

In [81]: chinchilla.x
Out[81]: set(['bye'])


In [82]: hamster.y['key']=5

In [83]: hamster.y,chinchilla.y
Out[83]: ({'key': 5}, {})
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13002966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档