相关疑难解决方法(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万
查看次数

可变对象与不可变对象

我试图让我的头围绕可变对象和不可变对象.使用可变对象会导致很多不良操作(例如,从方法中返回一个字符串数组),但我无法理解其中的负面影响.使用可变对象的最佳做法是什么?你应该尽可能地避开它们吗?

oop mutable immutability

166
推荐指数
6
解决办法
8万
查看次数

Julia:我们可以在不可变结构类型中更改对象多少?

我有一个不可变的结构,有四个对象定义如下:

struct FltFric
    muS::Array{Float64, 2}
    muD::Array{Float64, 2}
    Dc::Float64
    W::Array{Float64, 2}
end

muS = repmat([0.6], 100, 1) # Coefficient of static friction
muD = repmat([0.5], 100, 1) # Coefficient of dynamic friction
Dc = 0.1                     # Critical slip distance

FltFriction = FltFric(muS, muD, Dc, zeros(size(muS)))
Run Code Online (Sandbox Code Playgroud)

我正在修改FltFric.muS如下的值:

FltFriction.muS[1:20] = 100
Run Code Online (Sandbox Code Playgroud)

这很好用.但是当我尝试修改W的值时

FltFriction.W = (FltFriction.muS - FltFriction.muD)./(FltFriction.Dc)
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误:type FltFric is immutable.

为什么第一个语句在第二个语句出错时没有给出错误?如果类型是不可变的,则两个语句都应该给出错误.这两项任务有什么区别?

我知道我可以通过打字来解决问题mutable struct,但我不明白我的两个任务的区别.

struct types julia

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

标签 统计

immutability ×2

mutable ×2

julia ×1

oop ×1

python ×1

struct ×1

types ×1