|
Phyton Вопрос новичка про списки и множества
|
|||
---|---|---|---|
#18+
Здравствуйте! Есть два фрагмента кода. Первый работает правильно. Второй - нет. Просто хотел сразу сделать список из множеств вместо того, чтобы по очереди переводить каждый список в множество. Подскажите, пожалуйста, почему второй код так себя ведёт! В момент vse |= M[i] он меняет то, что не хотелось бы.. например, M[0]. 1. Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
2. Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 17:00 |
|
Phyton Вопрос новичка про списки и множества
|
|||
---|---|---|---|
#18+
Наверное, тут кроется в момент: 1. even = set(M[0]) vse = set(M[0]) 2. even = M[0] vse = M[0] В первом случае по ссылке even и по ссылке M[0] будут разные объекты. А во втором случае even и M[0] показывают на один объект. Так? А как сделать, чтобы по ссылке even жил отдельный объект? Я думал, что так как множество изменяемый объект, то при таком присвоении будет создаваться копия (новый объект). Прошу прощения, если брежу. Я только осваиваю ). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 18:08 |
|
Phyton Вопрос новичка про списки и множества
|
|||
---|---|---|---|
#18+
Печорин, Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
У Вас как-то слишком много преобразований в коде, которые никому не нужны :) Хотя зная как устроен питон, почти наверняка можно красивее. Я прост тоже только учусь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2019, 03:10 |
|
Phyton Вопрос новичка про списки и множества
|
|||
---|---|---|---|
#18+
Програмёр, большое спасибо за Ваш вариант! А на вопрос есть ответ? Я правильно понимаю, что ключевое отличие между моим вторым вариантом и Вашим в следующем моменте? even = set().union(M[0]) В моём случае, где я пишу просто even = M[0], в дальнейшем, когда я меняю even, то меняется и M[0] так? А в Вашем, когда меняется even, то M[0] не меняется. То есть, у меня even и M[0] - это один объект, а у Вас они разные.. Как-то так? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2019, 18:15 |
|
Phyton Вопрос новичка про списки и множества
|
|||
---|---|---|---|
#18+
ПечоринПрограмёр, большое спасибо за Ваш вариант! А на вопрос есть ответ? Я правильно понимаю, что ключевое отличие между моим вторым вариантом и Вашим в следующем моменте? even = set().union(M[0]) В моём случае, где я пишу просто even = M[0], в дальнейшем, когда я меняю even, то меняется и M[0] так? А в Вашем, когда меняется even, то M[0] не меняется. То есть, у меня even и M[0] - это один объект, а у Вас они разные.. Как-то так? Да, он похоже по ссылке множества передаёт (ну то есть переменную направляет на множество, а не создаёт копию). Ну по крайней мере я изначально написал как у Вас и получил ту же фигню (оно мне нулевой элемент прямо в M изменило)... Мне тоже это непривычно слегка, потому что я сам с пхп, а там массивы по ссылке уже 100 лет как не передаются (я уже даже не помню передавались ли они там вообще так, или я с каким-нить паскалем путаю) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2019, 20:49 |
|
|
start [/forum/topic.php?fid=23&fpage=17&tid=1459992]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 128ms |
0 / 0 |