Python 中有什么方法可以创建任何对象的不可变浅表副本吗?
Is there any way in Python to create an immutable shallow copy of any object?
在我的具体情况下,我想传递一个字典,其中包含我不想公开的列表,而不必进行耗时的深层复制。但是,我也想知道这只是一般情况。
在我的例子中,我试图将一个对象传递给这个对象:
dictionary =
{'x':
{
0: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
3: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
},
'y':
{
0: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
3: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
}
.
.
.
如果不转换为不可变类型(例如列表到元组),您就无法神奇地将对象转换为不可变类型。
不可变性不是标志或类似的简单东西 - 它是关于对象上方法的行为。
您可以创建自己的自定义容器,它有一个可变的开关(当可变打开时它会有效地禁用一些方法),但是 Python 不提供开箱即用的东西。
在我的具体情况下,我想传递一个字典,其中包含我不想公开的列表,而不必进行耗时的深层复制。但是,我也想知道这只是一般情况。
在我的例子中,我试图将一个对象传递给这个对象:
dictionary =
{'x':
{
0: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
3: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
},
'y':
{
0: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
3: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
}
.
.
.
如果不转换为不可变类型(例如列表到元组),您就无法神奇地将对象转换为不可变类型。
不可变性不是标志或类似的简单东西 - 它是关于对象上方法的行为。
您可以创建自己的自定义容器,它有一个可变的开关(当可变打开时它会有效地禁用一些方法),但是 Python 不提供开箱即用的东西。