Checklist
Summary
With the introduction of accept_new_options, Streamlit uses the string value instead of the index internally to track selections. This means repeated labels aren't supported anymore
Reproducible Code Example

import streamlit as st
class foo():
def __init__(self, a):
self.a = a
def __repr__(self):
return "foo " + self.a
def __str__(self):
return self.a
options = [foo("a"),"a"]
c = st.multiselect("C", options=options)
c
b = st.multiselect("D", options=["A", "B", "B", "C", "C", "C"])
b
Steps To Reproduce
- Run the app.
- Select either of the two items in the first multiselect. In both cases, the first instance is selected and no further selection can be made.
- Select "B" from the second multiselect and see that the second "B" can't be selected.
- Select "C" from the second multiselect and see that the other "C" items can't be selected.
Expected Behavior
Before the introduction of accept_new_options these multiple items could be selected.
Current Behavior
No response
Is this a regression?
Debug info
- Streamlit version: 1.44.2.dev20250424
- Python version: 3.13
- Operating System: Mac
- Browser: Prisma
Additional Information
No response
Checklist
Summary
With the introduction of
accept_new_options, Streamlit uses the string value instead of the index internally to track selections. This means repeated labels aren't supported anymoreReproducible Code Example
Steps To Reproduce
Expected Behavior
Before the introduction of
accept_new_optionsthese multiple items could be selected.Current Behavior
No response
Is this a regression?
Debug info
Additional Information
No response