Example usage:
```python
import streamlit as st
from sqlalchemy.orm import sessionmaker
@st.experimental_singleton
def get_db_sessionmaker():
    # This is for illustration purposes only
    DB_URL = "your-db-url"
    engine = create_engine(DB_URL)
    return sessionmaker(engine)
dbsm = get_db_sessionmaker()
```
How this compares to @st.cache:
Like @st.cache, this returns items by reference.
You can return any object type, including objects that are not serializable.
Unlike @st.cache, this decorator does not have additional logic to check whether you are unexpectedly mutating the cached object. That logic was slow and produced confusing error messages. So, instead, we're hoping that by calling this decorator "singleton," we're nudging you to the correct behavior.
This does not follow the computation graph.
