相关疑难解决方法(0)

在python中的字典的深拷贝

我想dict在python中制作一个深层副本.不幸的是,该.deepcopy()方法不存在dict.我怎么做?

>>> my_dict = {'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> my_copy = my_dict.deepcopy()
Traceback (most recent calll last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'deepcopy'
>>> my_copy = my_dict.copy()
>>> my_dict['a'][2] = 7
>>> my_copy['a'][2]
7
Run Code Online (Sandbox Code Playgroud)

最后一行应该是3.

我希望这些修改my_dict不会影响快照my_copy.

我怎么做?该解决方案应与Python 3.x兼容.

python python-3.x

290
推荐指数
3
解决办法
19万
查看次数

CPython中的全局解释器锁(GIL)是什么?

什么是全球解释器锁,为什么它是一个问题?

围绕从Python中删除GIL已经产生了很多噪音,我想知道为什么这么重要.我自己从未编写过编译器或解释器,所以不要节俭细节,我可能需要他们理解.

python gil python-internals

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

是python变量赋值原子?

假设我正在使用signal处理程序来处理间隔计时器.

def _aHandler(signum, _):
  global SomeGlobalVariable
  SomeGlobalVariable=True
Run Code Online (Sandbox Code Playgroud)

我可以设置SomeGlobalVariable而不必担心,在设置SomeGlobalVariable(即Python VM正在执行字节码来设置变量)的不太可能的情况下,信号处理程序中的赋值会破坏某些东西吗?(即亚稳态)

更新:我特别感兴趣的是在处理程序之外进行"复合赋值".

(也许我在想"低级别",这一切都在Python中得到了解......来自嵌入式系统的背景,我不时有这些冲动)

python signals

26
推荐指数
3
解决办法
1万
查看次数

python字典异步安全吗?

我在我的 Python 应用程序中创建了一个字典,用于保存数据,并且我有两个任务同时运行并从外部 API 获取数据。一旦他们获得数据,他们就会更新字典——每个字典都有一个不同的键。

我想了解字典是否是异步安全的,还是在读取/更新字典时需要加锁?

任务还每次读取最后保存的值。

my_data = {}
asyncio.create_task(call_func_one_coroutine)
asyncio.create_task(call_func_two_coroutine)

async def call_func_one_coroutine():
  data =  await goto_api_get_data()
  my_data['one'] = data + my_data['one']


async def call_func_two_coroutine():
  data =  await goto_api_another_get_data()
  my_data['two'] = data + my_data['two']

Run Code Online (Sandbox Code Playgroud)

python python-asyncio

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