相关疑难解决方法(0)

如何避免在实例之间共享类数据?

我想要的是这种行为:

class a:
    list = []

x = a()
y = a()

x.list.append(1)
y.list.append(2)
x.list.append(3)
y.list.append(4)

print(x.list) # prints [1, 3]
print(y.list) # prints [2, 4]
Run Code Online (Sandbox Code Playgroud)

当然,我打印时真正发生的是:

print(x.list) # prints [1, 2, 3, 4]
print(y.list) # prints [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

显然,他们正在课堂上分享数据a.如何获得单独的实例来实现我想要的行为?

python class

133
推荐指数
5
解决办法
2万
查看次数

defaultdict 的意外行为

今天遇到一个奇怪的问题,下面是一些示例代码

from collections import defaultdict

class Counter:
    hits = 0
    visitors = set()

    def addHit(self, ip):
        self.hits += 1
        self.visitors.add(ip)

d = defaultdict(Counter)
d['a'].addHit('1.1.1')
d['a'].addHit('2.2.2')
d['b'].addHit('3.3.3')

print d['a'].hits, d['a'].visitors
print d['b'].hits, d['b'].visitors
Run Code Online (Sandbox Code Playgroud)

预期结果:

2 set(['1.1.1', '2.2.2'])
1 set(['3.3.3'])
Run Code Online (Sandbox Code Playgroud)

实际结果:

2 set(['1.1.1', '3.3.3', '2.2.2'])
1 set(['1.1.1', '3.3.3', '2.2.2'])
Run Code Online (Sandbox Code Playgroud)

为什么访问者集在我认为应该是 Counter 类的单独实例之间共享数据。每个输入不应该指向一个特定的实例吗?

更难以理解的是,命中计数器似乎工作正常并将事物分开。

谁能帮助我了解这里发生了什么或如何解决它?

python oop dictionary python-2.7

0
推荐指数
1
解决办法
201
查看次数

标签 统计

python ×2

class ×1

dictionary ×1

oop ×1

python-2.7 ×1