Имам обект scene
, който е екземпляр на клас Scene
и има списък children
, който връща:
[<pythreejs.pythreejs.Mesh object at 0x000000002E836A90>, <pythreejs.pythreejs.SurfaceGrid object at 0x000000002DBF9F60>, <pythreejs.pythreejs.Mesh object at 0x000000002E8362E8>, <pythreejs.pythreejs.AmbientLight object at 0x000000002E8366D8>, <pythreejs.pythreejs.DirectionalLight object at 0x000000002E836630>]
Ако искам да актуализирам този списък с point
, който има тип:
<class 'pythreejs.pythreejs.Mesh'>
Трябва да изпълня:
scene.children = list(scene.children) + [point]
Обикновено бих изпълнил:
scene.children.append(point)
Въпреки това, докато и двата подхода добавят point
, само първият действително актуализира списъка и произвежда очаквания изход (т.е. воксели в решетка). Защо?
Пълният код може да бъде намерен тук.
append
трябва да работи. Ако не стане, става нещо много странно и трябва да публикувате минимално възпроизводим пример. - person Kevin   schedule 10.09.2015scene.children
всъщност не е списък, това е някакъв друг клас, който имплементираappend
, но не се държи по начина, по който би се държал списък. Ако поставитеprint(type(scene.children))
на ред непосредствено предscene.children.append(point)
, какъв е резултатът? - person Kevin   schedule 10.09.2015<type 'list'>
; имайте предвид, чеscene
е и екземпляр на класScene
иchildren
е списъкът - person nluigi   schedule 10.09.2015scene.children
, за да видите далиpoint
присъства в него? Веднага след редаappend
проверявате ли, или по-късно? - person Kevin   schedule 10.09.2015point
всъщност се добавя, тъй катоpoint in scene.children
връщаTrue
след добавяне. Резултатът обаче е, че в случайscene.children = list(scene.children) + [point]
изходът е както се очаква (воксели се добавят към мрежата), докато в случайscene.children.append(point)
не е. Това наистина е объркващо :(... - person nluigi   schedule 10.09.2015append
ing към него ще промени съдържанието на списъка на двете променливи. Но ако направитеscene.children = some_new_value
, тогава scene.children ще сочи към нов списък, а другата променлива ще сочи към стария. - person Kevin   schedule 10.09.2015scene.children
да е свойство, което връща копие на списъка, използван вътрешно? Ако нямате източника или документацията, опитайтеprint(scene.children is scene.children)
- person Niklas R   schedule 10.09.2015