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 不提供开箱即用的东西。