diff --git a/geopandas/geodataframe.py b/geopandas/geodataframe.py
index c5c3ec8d..0fc527cf 100644
--- a/geopandas/geodataframe.py
+++ b/geopandas/geodataframe.py
@@ -6,6 +6,8 @@ import pandas as pd
 from pandas import DataFrame, Series
 
 from shapely.geometry import mapping, shape
+from shapely.geometry.base import BaseGeometry
+
 
 from pyproj import CRS
 
@@ -684,6 +686,8 @@ class GeoDataFrame(GeoPandasBase, DataFrame):
         df['geometry'] = [geom... for geom in df.geometry]
         """
         if not pd.api.types.is_list_like(key) and key == self._geometry_column_name:
+            if pd.api.types.is_scalar(value) or isinstance(value, BaseGeometry):
+                value = [value] * self.shape[0]
             try:
                 value = _ensure_geometry(value, crs=self.crs)
             except TypeError:

BUG: CRS not propagated to array
I have found one issue caused by #1339. OSMnx [uses](https://github.com/gboeing/osmnx/blob/a4b4dc9efb8223b8aab257ff8825454d4bd06ddc/osmnx/projection.py#L71-L75) following pattern:

```py
geometry = Point(0,0)  # my addition

gdf = gpd.GeoDataFrame()
gdf.crs = 4326
gdf['geometry'] = None
gdf.loc[0, 'geometry'] = geometry
...
gdf.to_crs()  # it fails here due to missing CRS
```

In the end, gdf does have CRS but `geometry` and GeometryArray do not. It just raises two warnings:

```
FutureWarning: Assigning CRS to a GeoDataFrame without a geometry column is now deprecated and will not be supported in the future.

UserWarning: Geometry column does not contain geometry.
```

I would say that we should fix that now, but it is not a pattern I would encourage at all.
diff --git a/geopandas/tests/test_crs.py b/geopandas/tests/test_crs.py
index 088cc37b..6acfa6d0 100644
--- a/geopandas/tests/test_crs.py
+++ b/geopandas/tests/test_crs.py
@@ -6,7 +6,7 @@ import random
 import numpy as np
 import pandas as pd
 
-from shapely.geometry import Point, Polygon
+from shapely.geometry import Point, Polygon, LineString
 import pyproj
 
 from geopandas import GeoSeries, GeoDataFrame, points_from_xy, datasets, read_file
@@ -282,6 +282,18 @@ class TestGeometryArrayCRS:
         df.crs = 27700
         assert df.crs == self.osgb
 
+    @pytest.mark.parametrize(
+        "scalar", [None, Point(0, 0), LineString([(0, 0), (1, 1)])]
+    )
+    def test_scalar(self, scalar):
+        with pytest.warns(FutureWarning):
+            df = GeoDataFrame()
+            df.crs = 4326
+        df["geometry"] = scalar
+        assert df.crs == self.wgs
+        assert df.geometry.crs == self.wgs
+        assert df.geometry.values.crs == self.wgs
+
     def test_read_file(self):
         nybb_filename = datasets.get_path("nybb")
         df = read_file(nybb_filename)

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest black flake8 descartes matplotlib rtree
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==25.3.0
black==25.1.0
certifi==2025.1.31
click==8.1.8
click-plugins==1.1.1
cligj==0.7.2
contourpy==1.3.0
cycler==0.12.1
Cython==3.0.12
descartes==1.1.0
exceptiongroup==1.2.2
fiona==1.10.1
flake8==7.2.0
fonttools==4.56.0
-e git+https://github.com/geopandas/geopandas.git@4061567e85ce55c24ed2a418fca6c86e8c49d3cb#egg=geopandas
importlib_metadata==8.6.1
importlib_resources==6.5.2
iniconfig==2.1.0
kiwisolver==1.4.7
matplotlib==3.9.4
mccabe==0.7.0
mypy-extensions==1.0.0
numpy==2.0.2
packaging==24.2
pandas==2.2.3
pathspec==0.12.1
pillow==11.1.0
platformdirs==4.3.7
pluggy==1.5.0
pycodestyle==2.13.0
pyflakes==3.3.2
pyparsing==3.2.3
pyproj==3.6.1
pytest==8.3.5
python-dateutil==2.9.0.post0
pytz==2025.2
rtree==1.4.0
shapely==2.0.7
six==1.17.0
tomli==2.2.1
typing_extensions==4.13.0
tzdata==2025.2
zipp==3.21.0

name: geopandas
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==25.3.0
      - black==25.1.0
      - certifi==2025.1.31
      - click==8.1.8
      - click-plugins==1.1.1
      - cligj==0.7.2
      - contourpy==1.3.0
      - cycler==0.12.1
      - cython==3.0.12
      - descartes==1.1.0
      - exceptiongroup==1.2.2
      - fiona==1.10.1
      - flake8==7.2.0
      - fonttools==4.56.0
      - importlib-metadata==8.6.1
      - importlib-resources==6.5.2
      - iniconfig==2.1.0
      - kiwisolver==1.4.7
      - matplotlib==3.9.4
      - mccabe==0.7.0
      - mypy-extensions==1.0.0
      - numpy==2.0.2
      - packaging==24.2
      - pandas==2.2.3
      - pathspec==0.12.1
      - pillow==11.1.0
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - pycodestyle==2.13.0
      - pyflakes==3.3.2
      - pyparsing==3.2.3
      - pyproj==3.6.1
      - pytest==8.3.5
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - rtree==1.4.0
      - shapely==2.0.7
      - six==1.17.0
      - tomli==2.2.1
      - typing-extensions==4.13.0
      - tzdata==2025.2
      - zipp==3.21.0
prefix: /opt/conda/envs/geopandas

geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_scalar[None] geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_scalar[scalar1] geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_scalar[scalar2]
geopandas/tests/test_crs.py::test_to_crs_transform geopandas/tests/test_crs.py::test_to_crs_inplace geopandas/tests/test_crs.py::test_to_crs_geo_column_name geopandas/tests/test_crs.py::test_transform2[epsg_number-epsg_number] geopandas/tests/test_crs.py::test_transform2[epsg_number-epsg_string] geopandas/tests/test_crs.py::test_transform2[epsg_number-epsg_dict] geopandas/tests/test_crs.py::test_transform2[epsg_number-proj4_string] geopandas/tests/test_crs.py::test_transform2[epsg_number-proj4_dict] geopandas/tests/test_crs.py::test_transform2[epsg_string-epsg_number] geopandas/tests/test_crs.py::test_transform2[epsg_string-epsg_string] geopandas/tests/test_crs.py::test_transform2[epsg_string-epsg_dict] geopandas/tests/test_crs.py::test_transform2[epsg_string-proj4_string] geopandas/tests/test_crs.py::test_transform2[epsg_string-proj4_dict] geopandas/tests/test_crs.py::test_transform2[epsg_dict-epsg_number] geopandas/tests/test_crs.py::test_transform2[epsg_dict-epsg_string] geopandas/tests/test_crs.py::test_transform2[epsg_dict-epsg_dict] geopandas/tests/test_crs.py::test_transform2[epsg_dict-proj4_string] geopandas/tests/test_crs.py::test_transform2[epsg_dict-proj4_dict] geopandas/tests/test_crs.py::test_transform2[proj4_string-epsg_number] geopandas/tests/test_crs.py::test_transform2[proj4_string-epsg_string] geopandas/tests/test_crs.py::test_transform2[proj4_string-epsg_dict] geopandas/tests/test_crs.py::test_transform2[proj4_string-proj4_string] geopandas/tests/test_crs.py::test_transform2[proj4_string-proj4_dict] geopandas/tests/test_crs.py::test_transform2[proj4_dict-epsg_number] geopandas/tests/test_crs.py::test_transform2[proj4_dict-epsg_string] geopandas/tests/test_crs.py::test_transform2[proj4_dict-epsg_dict] geopandas/tests/test_crs.py::test_transform2[proj4_dict-proj4_string] geopandas/tests/test_crs.py::test_transform2[proj4_dict-proj4_dict] geopandas/tests/test_crs.py::test_crs_axis_order__always_xy geopandas/tests/test_crs.py::test_skip_exact_same
geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_array geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_series geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_dataframe geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_read_file geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_multiple_geoms geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_multiple_geoms_set_geom geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_assign_cols geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_copy geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_rename geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_to_crs geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_from_shapely geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_from_wkb geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_from_wkt geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_points_from_xy geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_original geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_ops geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_binary_ops geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_other geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_affinity_methods[affine_transform-arg0] geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_affinity_methods[translate-arg1] geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_affinity_methods[rotate-arg2] geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_affinity_methods[scale-arg3] geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_affinity_methods[skew-arg4] geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_slice geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_concat geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_merge geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_deprecation geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_setitem_geometry geopandas/tests/test_crs.py::TestGeometryArrayCRS::test_astype
geopandas/geodataframe.py
geopandas/geodataframe.py