问题中提到字典的值是一个向量(数组),也就意味着字典的值是ANY类型,元组(tuple)的元素也是ANY类型。对于tuple和值类型为ANY的字典,存储的对象一般情况下是不能修改的。原因是ANY类型是一个对象,我们在完全或部分复制一个tuple或字典,或者访问他们的元素是,得到的是一个引用,而不是拷贝。也就是用的是shallow copy而不是deep copy,如果允许修改这些元素对象,在复杂的代码中极易造成代码质量问题,以及多线程并发读写的问题。
现在如果要修改ANY类型字典中存储的元素对象,有两个例外:
(1)使用dictUpdate!函数进行修改。(必须是DolphinDB 1.10.11以及以后的版本)
info_dict[code].append!(v1[v1.size()-1]+s[12])
修改后的代码
dictUpdate!(info_dict, append!, code, v1[v1.size()-1]+s[12])
(2)如果元素对象是一个内存表,可以直接使用tableInsert函数进行修改。但是开发人员必须确保不存在多线程的问题。如果有多个线程并发读写这个内存表,必须确保这个内存表是共享的。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…