相关疑难解决方法(0)

不可变与可变类型

我对不可变类型是多么困惑.我知道该float对象被认为是不可变的,我的书中有这种类型的例子:

class RoundFloat(float):
    def __new__(cls, val):
        return float.__new__(cls, round(val, 2))
Run Code Online (Sandbox Code Playgroud)

这是因为类结构/层次结构被认为是不可变的吗?意思float是在类的顶部并且是它自己的方法调用.类似于这种类型的例子(即使我的书说dict是可变的):

class SortedKeyDict(dict):
    def __new__(cls, val):
        return dict.__new__(cls, val.clear())
Run Code Online (Sandbox Code Playgroud)

虽然可变的东西在类中有方法,但是这种类型的例子:

class SortedKeyDict_a(dict):
    def example(self):
        return self.keys()
Run Code Online (Sandbox Code Playgroud)

另外,对于最后一个class(SortedKeyDict_a),如果我将这种类型的集合传递给它:

d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2))
Run Code Online (Sandbox Code Playgroud)

在不调用example方法的情况下,它返回一个字典.SortedKeyDictwith 将其__new__标记为错误.我尝试将整数传递给RoundFloat类,__new__并且它没有标记错误.

python mutable immutability

172
推荐指数
11
解决办法
25万
查看次数

python中的不可变对象

我看到一篇关于不可变对象的文章.

它表示何时:
variable = immutable
将不可变赋值给变量.

例如
a = b # b is a immutable
它在这种情况下a指的是a copy of b,而不是reference to b.如果是mutable,那么a就是a reference to b

所以:

a = 10
b = a
a =20
print (b) #b still is 10
Run Code Online (Sandbox Code Playgroud)

但在这种情况下:

a = 10
b = 10
a is b # return True
print id(10)
print id(a)
print id(b) # id(a) == id(b) == id(10)
Run Code Online (Sandbox Code Playgroud)

if a是副本10, …

python mutable immutability variable-assignment

1
推荐指数
2
解决办法
3379
查看次数

如何在不复制对象的情况下将var添加到Python列表中?

我正在尝试用Python完成一些事情,但我无法在互联网上找到关于此的信息,所以这是我的问题.

有这个示例代码:

a = 5
b = [a]
Run Code Online (Sandbox Code Playgroud)

我需要b [0]作为a的指针引用.目前,如果我这样做

b[0] = 7
Run Code Online (Sandbox Code Playgroud)

a.var仍然是5,如果我将值设置为ab [0],则a保持不变.

我想知道在Python中是否有任何方法可以将Object存储在数组中而不复制它,所以如果我修改了一个,我也会修改另一个.

编辑一个

我想更清楚地说明我想要完成的事情,所以也许我能找到真正的答案.

我有一个自定义类

class Foo(object):
    def __init__(self):
        self.var = 7
Run Code Online (Sandbox Code Playgroud)

我还有一个这样的列表:

myList = [Foo()]
Run Code Online (Sandbox Code Playgroud)

我真正的问题是:

在代码的某个地方,我需要做以下任务:

self.foo = myList[0]
Run Code Online (Sandbox Code Playgroud)

然后当我尝试访问这个foo var时,我注意到它从未从原始实例更新.所以基本上这就是我需要的.

编辑二

所有答案都是对的.在我的赋值的每一步使用id(var)我可以验证Object始终是相同的,因此错误必须在其他地方.感谢所有人的帮助,我希望这篇文章可以帮助其他人.

python reference list object

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