我有以下代码:
<?php
$sql = "SELECT MAX(timestamp_pole) as last_pole FROM pole WHERE id_group = ". $id_grup;
$resultado = $mysqli->query($sql);
$resultado = $resultado->fetch_assoc();
$las_00 = date('Y-m-d');
$las_00 = strtotime($las_00);
if ($resultado['last_pole'] >= $las_00){
} else {
$sql = "INSERT INTO pole (timestamp_pole, id_user, id_group) VALUES (". $timestamp .",". $user['id'] .",". $id_group .")";
$mysqli->query($sql);
//return addslashes($sql);
if (isset($user['username']))
return "@". $user['username'] ." pole!";
else
return $user['name'] ." pole!";
}
?>
输出
a_dict = dict.fromkeys(['a', 'b', 'c'], [])
a_dict['a'].append(1)
print(a_dict)
为什么1被附加到所有数组而不是仅有`{'a': [1], 'c': [1], 'b': [1]}`
的数组?如果我只想附加密钥a
的那个,我该怎么做?
答案 0 :(得分:1)
fromkeys()方法返回一个新字典,其中给定的元素序列作为字典的键。
如果设置了value参数,则新创建的字典的每个元素都将设置为提供的值。
如果提供的值是可变对象(其值可以修改),如list,dictionary等,则修改可变对象时,序列的每个元素也会更新。
这是因为,每个元素都被赋予对同一个对象的引用(指向内存中的同一个对象)。
答案 1 :(得分:0)
啊哈,似乎dict.fromkeys只生成一个值的副本,并返回一个指向它的指针。如果它被初始化为a_dict = {&#39; a&#39;:[],&#39; b&#39;:[],&#39; c&#39;:[]}那么代码按预期工作。
知道了这一点后,在dict.fromkeys all point to same list
找到了副本答案在那里提出:
yet_another_dict = {key:[]表示[&#39; a&#39;,&#39; b&#39;,&#39; c&#39;]}
答案 2 :(得分:0)
a_dict = dict.fromkeys(['a', 'b', 'c'], [])
这会创建一个包含键'a','b','c'的字典,并为每个键创建值[]
。
这里的问题是每个键指向相同的值:内存中相同的空dict实例[]
。
a_dict['a']
和a_dict['b']
不仅仅是平等的(同等地评估),它们是完全相同的实例。您创建的字典有三个键,每个键的值是指向同一个空字典实例的指针。
您可以查看:
a_dict['a'] == a_dict['b']
# Returns True: both are equal
a_dict['a'] is a_dict['b']
# Also returns True: both are the same instance
因此,修改a_dict['a']
会修改该共享dict
实例并影响a_dict['b']
。